与全球提供商进行Angular 2测试

时间:2016-12-01 13:10:01

标签: angular karma-runner angular-cli

我正在测试一个角度cli项目中的很多组件,并且我在其中一些项目中使用RouterTestingModule来存根路由器。我想在所有测试中添加RouterTestingModule,因此我不必有选择地添加它。

我将其添加到test.js中的测试设置中,如下所示,但它似乎没有包含在组件的测试模块中。这是包含" global"的正确方法吗?提供者?

Promise.all([
    System.import('@angular/core/testing'),
    System.import('@angular/platform-browser-dynamic/testing'),
    System.import('@angular/router/testing'),
])
    // First, initialize the Angular testing environment.
    .then(([testing, testingBrowser, testingRouter]) => {
        testing.getTestBed().initTestEnvironment(
            testingBrowser.BrowserDynamicTestingModule,
            testingBrowser.platformBrowserDynamicTesting(),
            testingRouter.RouterTestingModule,
        );
    })
    // Then we find all the tests.
    .then(() => require.context('./', true, /\.spec\.ts/))
    // And load the modules.
    .then(context => context.keys().map(context))
    // Finally, start Karma to run the tests.
    .then(__karma__.start, __karma__.error);

文档说明initTestEnvironment

  

这可能只被调用一次,以设置公共提供者   当前平台上的当前测试套件。

1 个答案:

答案 0 :(得分:1)

稍晚但解决方法是将一组提供程序传递给platformBrowserDynamicTesting()函数。

Promise.all([
    System.import('@angular/core/testing'),
    System.import('@angular/platform-browser-dynamic/testing'),
    System.import('@angular/router/testing'),
])
    // First, initialize the Angular testing environment.
    .then(([testing, testingBrowser, testingRouter]) => {
        testing.getTestBed().initTestEnvironment(
            testingBrowser.BrowserDynamicTestingModule,
            testingBrowser.platformBrowserDynamicTesting([..<providers here>..])
        );
    })
    // Then we find all the tests.
    .then(() => require.context('./', true, /\.spec\.ts/))
    // And load the modules.
    .then(context => context.keys().map(context))
    // Finally, start Karma to run the tests.
    .then(__karma__.start, __karma__.error);