我使用简单的配置进行简单的测试:
fdescribe("A spec", function() {
let service: UserService;
beforeEach(()=>{
TestBed.configureTestingModule({ providers: [UserService] });
});
it('should use UserService', () => {
service = TestBed.get(UserService);
expect(service.getValue()).toBe('real value');
});
});
一切正常,但如果我只想删除TestBed.configureTestingModule
之外的beforeEach
fdescribe("A spec", function() {
let service: UserService;
TestBed.configureTestingModule({ providers: [UserService] });
it('should use UserService', () => {
service = TestBed.get(UserService);
expect(service.getValue()).toBe('real value');
});
});
会抛出错误:
NullInjectorError: No provider for UserService
那是因为 TestBed 在 UserService 下找不到任何服务,因为配置尚未就绪。
所以,正如您所看到的,我已经使用 beforeEach 作为 sync 操作,我猜 TestBed.configureTestingModule 它不是同步。
我缺少什么? beforeEach 如何运作而无需提供async
或done()
选项?
或问题本身在 TestBed.configureTestingModule 中?
我不确定这两者是如何起作用的。
有人可以解释一下吗?
答案 0 :(得分:0)
显然需要在每个TestBed.configureTestingModule
语句中调用it
。否则,配置将每次重置。这就是为什么我们需要在beforeEach
内调用它,尽管逻辑对我来说似乎很愚蠢。