我有一个简单的配置简单的测试:
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作为同步操作,我想TestBed.configureTestingModule它不同步。
我错过了什么?如果不提供async
或done()
选项,beforeEach如何运作?
或问题本身在TestBed.configureTestingModule中?
我不确定这两个如何一起工作。
谁能解释一下?
显然需要在每个TestBed.configureTestingModule
声明中调用it
。否则,配置将每次重置。这就是为什么我们需要在beforeEach
中调用它,尽管逻辑对我来说似乎很愚蠢。