【发布时间】:2018-08-13 02:08:27
【问题描述】:
我有一个简单配置的简单测试:
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 中?
我不确定这两者是如何一起工作的。
谁能解释一下?
【问题讨论】:
-
为什么要删除 beforeEach 之外的 TestBed.configureTestingModule?有什么理由吗?我认为动态生成的模块(又名 testBed)在“it”/“beforeEach”语句之外不存在全局。因此,如果您不调用 configureTestingModule,您将不得不提供服务。我不认为你可以解决这个问题
-
它确实存在于描述之外。我只是想知道为什么我每次都需要调用 beforeEach,即使是一次测试,而不是在没有它的情况下编写我的配置