【发布时间】:2021-11-29 23:00:42
【问题描述】:
我在解决此服务的覆盖范围方面遇到了一些问题。
我完成了设置,它说服务已创建,所以我认为没问题,但后来当我在玩笑中实现或使用 spyOn 时,该方法没有被覆盖。
这是我在服务上的一些代码。 在他的构造函数中声明了 authService。
身份验证服务
abstract getUserRoles(roles?: boolean): string[];
hasRole(role: string):boolean {
const roleLow = role && role.toLowerCase();
return !!roleLow && this.getUserRoles(true).findIndex(r => roleLow === r.totLowerCase()) > =0;
}
Permissions.service
constructor(protected authService: AuthService) {
}
hasPermission(permission: string) {
return this.authService.hasRole(permission);
hasPermissionAdmin() {
return this.hasPermission('App_Admin_permission');
这就是我的测试代码的样子。
import { TestBed } from "@angular/core/testing"
import { AuthService, PermissionsService } from "services"
describe('Permissions Service', () => {
let service: PermissionsService;
const permissionsServiceMock = {
hasPermission: () => true,
hasPermissionAdmin: () => true,
};
beforeEach(() => {
TestBed.configureTestingModule({
providers:[
{provide: PermissionsService, useValue: permissionsServiceMock},
{provide: AuthService, useValue: MockAuthService},
]
});
service = TestBed.inject(PermissionsService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
it('should have Admin Permission', () => {
const spy = jest.spyOn(service, 'hasPermissionAdmin');
service.hasPermissionAdmin();
expect(spy).toHaveBeenCalledTimes(1);
});
});
当我开玩笑地运行覆盖时,它正在运行/通过但没有覆盖它。 有人有想法吗?
【问题讨论】:
-
您为什么会得到报道?您似乎正在针对身份验证服务的测试替身“测试”权限服务的测试替身。实际上,您甚至没有使用
permissionsServiceMock,因为无论如何您都使用spyOn方法。您所测试的只是当您调用该方法时,您调用该方法,这是完全没有意义的——您的测试中不涉及真正的实现。 -
@jonrsharpe 你建议在那里测试什么?
-
测试实际的行为 - 它如何与合作者的测试替身进行交互,返回什么?
expect(service.hasPermissionAdmin()).toBe(true),例如,给定适当的身份验证服务配置。 -
@jonrsharpe 非常感谢 :)
标签: angular unit-testing jestjs