首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular2 RC5如何正确配置测试模块

Angular2 RC5如何正确配置测试模块
EN

Stack Overflow用户
提问于 2016-08-16 21:59:51
回答 4查看 12.2K关注 0票数 13

我正在更新Angular2 RC5的单元测试。变化量g注意到以下突然变化:

不建议使用addProviders,而是使用TestBed.configureTestingModule

但是,这似乎只有在尝试在测试中包含服务时才会出现错误。其中,我的单元测试用于执行以下操作:

代码语言:javascript
复制
beforeEach(() => addProviders([
    MyService,
    MockBackend,
    ... 
]));

它现在应该配置测试模块:

代码语言:javascript
复制
TestBed.configureTestingModule({
    providers: [
        StoryService,
        MockBackend,
        ...
    ]
});

但现在这会引发一个错误

服务: MyService遇到一个声明异常失败 错误:当测试模块已经实例化时,无法配置测试模块。确保在使用inject之前没有使用TestBed.configureTestingModule

我已经检查过inject没有在configureTestingModule之前被调用。这不影响任何其他组件/指令测试,它们似乎通过了很好的测试。如何解决使用RC5测试服务的单元错误?我意识到,我可能不得不等到RC5的测试文档更新之后,但对可能的解决方案的任何洞察都将不胜感激。

EN

回答 4

Stack Overflow用户

发布于 2016-09-09 11:09:31

根据我所读到的,您只需要插入一次测试环境。然后,您可以在每次测试之前重置测试模块并配置测试模块:

代码语言:javascript
复制
beforeEach(() => {
        TestBed.configureTestingModule({
            declarations: [ GridComponent ]
        });
    });

    afterEach(() => {
        TestBed.resetTestingModule();
    });

前期的配置是:

代码语言:javascript
复制
var testing = require('@angular/core/testing');
var browser = require('@angular/platform-browser-dynamic/testing');

try {
    testing.TestBed.initTestEnvironment(browser.BrowserDynamicTestingModule, browser.platformBrowserDynamicTesting());
} catch ($error) {
    console.log("test env failure" + $error);
}

在阅读完代码之后,configureTestingModule似乎会在内部调用resetTestingModule,但为了便于阅读,我喜欢在每个代码之后声明它。

票数 9
EN

Stack Overflow用户

发布于 2016-08-27 18:40:01

我有一个类似的问题,并通过重置测试环境来修复它:

代码语言:javascript
复制
import {MyService} from './my.service';
import {inject, TestBed} from '@angular/core/testing/test_bed';
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } 
       from '@angular/platform-browser-dynamic/testing';

describe('MyService', () => {
  beforeEach(() => {
    // Must reset the test environment before initializing it.
    TestBed.resetTestEnvironment();

    TestBed
      .initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting())
      .configureTestingModule({
        providers: [
          MyService
        ]
    });
  });

  it('should do something', inject([MyService], (s: MyService) => {
    let r = s.getResult();
    expect(r.length).toBe(2);
  }));
});

说到角2,我是个菜鸟,所以我欢迎更有见识的人的纠正。似乎不必在每个测试中重置和重新初始化测试环境。不幸的是,这是我唯一能让它发挥作用的方法。

票数 6
EN

Stack Overflow用户

发布于 2016-08-17 10:29:49

TestBed.configureTestingModule插入beforeEach中,如下所示:

代码语言:javascript
复制
beforeEach(() => {
    TestBed.configureTestingModule({
        providers: [
            StoryService,
            MockBackend,
            ...
]
    });
});
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38985159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档