jasmine beforeEach和angular TestBed.configureTestingModule,同步与否?

时间:2018-03-05 12:05:11

标签: angular jasmine

我使用简单的配置进行简单的测试:

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 如何运作而无需提供asyncdone()选项?

或问题本身在 TestBed.configureTestingModule 中?

我不确定这两者是如何起作用的。

有人可以解释一下吗?

1 个答案:

答案 0 :(得分:0)

显然需要在每个TestBed.configureTestingModule语句中调用it。否则,配置将每次重置。这就是为什么我们需要在beforeEach内调用它,尽管逻辑对我来说似乎很愚蠢。