unit-testing - Angular2 RC5 如何正确配置测试模块

标签 unit-testing angular

我正在更新 Angular2 RC5 的单元测试。 changelog注意到以下重大变化:

addProviders [is deprecated], use TestBed.configureTestingModule instead

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

beforeEach(() => addProviders([
    MyService,
    MockBackend,
    ... 
]));

现在应该配置测试模块:

TestBed.configureTestingModule({
    providers: [
        StoryService,
        MockBackend,
        ...
    ]
});

但是现在会抛出一个错误

Service: MyService encountered a declaration exception FAILED

Error: Cannot configure the test module when the test module has already been instantiated. Make sure you are not using inject before TestBed.configureTestingModule.

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

最佳答案

根据我的阅读,您只需要初始化一次测试环境。然后,您可以在每次测试前重置测试模块并配置测试模块:

beforeEach(() => {
        TestBed.configureTestingModule({
            declarations: [ GridComponent ]
        });
    });

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

前期配置为:

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,但出于可读性目的,我喜欢在每个代码之后声明它。

关于unit-testing - Angular2 RC5 如何正确配置测试模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38985159/

相关文章:

unit-testing - TDD 与函数式编程语言相比如何?

javascript - 针对不同浏览器的 JavaScript 中的一般单元测试概念/实践?

c# - 失败 try/catch 阻止读取 csv

node.js - 在基于 Angular 6 的项目中更新 npm 时出现错误

单击选项卡时出现 Angular 全日历初始化问题

css - 在 Angular 中导入全局 css 文件会导致 Webpack 发出巨大的模块包

angular - mat-table - 如果任何列的内容很长,则溢出父级 div

c# - MsTest 中出现多个 ExpectedException

javascript - 如何使用 spyOn 测试异步函数?

java - 为什么 Angular 不通过 POST 请求发送 cookie,即使我已将 withCredentials 设置为 true?