【发布时间】:2018-07-27 07:27:17
【问题描述】:
我想测试一项服务:
@Injectable()
export class AuthenticationService {
initialAuthStatus = this.authenticationStatus.first();
constructor(private adalService: AdalService,
private settingsProvider: SettingsProvider) { }
public get authenticationStatus(): any {
return this.adalService.userInfo.authenticationStatus;
}
}
以及对服务的测试:
describe('AuthenticationService', () => {
let mockAdalService: any;
let adalService: any;
let service: any;
let mockSettingsProvider: any;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
AuthenticationService,
AdalService,
{ provide: SettingsProvider, useClass: MockSettingsProvider },
{ provide: AdalService, useClass: MockAdalService }
]
});
mockAdalService = new MockAdalService();
adalService = new AdalService();
mockSettingsProvider = new MockSettingsProvider();
});
it('should be created', inject([AuthenticationService], (service: AuthenticationService) => {
expect(service).toBeTruthy();
}));
});
但是,测试失败并显示以下错误消息:
AuthenticationService should be created
TypeError: Cannot read property 'authenticationStatus' of undefined
它与身份验证状态的getter有关,但我无法弄清楚它失败的确切原因。
非常感谢任何帮助:)
【问题讨论】:
-
错误来自这一行:initialAuthStatus = this.authenticationStatus.first();那时它还没有被初始化
-
我该如何解决?
-
将其放入构造函数或 ngOnInit 中,然后将 initialAuthStatus 留在顶部
-
哇,好吧,我真的是瞎了。我现在已经把它放在了 ngOnInit 中(构造函数没有工作),它现在可以工作了。感谢日志:) 请写一个帖子,以便我可以将其标记为答案。
标签: javascript angular typescript jasmine karma-jasmine