【问题标题】:jasmine beforeEach and angular TestBed.configureTestingModule, sync or not?jasmine beforeEach 和角度 TestBed.configureTestingModule,同步与否?
【发布时间】: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 如何在不提供asyncdone() 选项的情况下工作?

或者问题本身在 TestBed.configureTestingModule 中?

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

谁能解释一下?

【问题讨论】:

  • 为什么要删除 beforeEach 之外的 TestBed.configureTestingModule?有什么理由吗?我认为动态生成的模块(又名 testBed)在“it”/“beforeEach”语句之外不存在全局。因此,如果您不调用 configureTestingModule,您将不得不提供服务。我不认为你可以解决这个问题
  • 它确实存在于描述之外。我只是想知道为什么我每次都需要调用 beforeEach,即使是一次测试,而不是在没有它的情况下编写我的配置

标签: angular jasmine


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-25
    • 2015-08-19
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 2013-07-24
    • 1970-01-01
    相关资源
    最近更新 更多