【问题标题】:Error when setting base test providers into several unit tests将基本测试提供程序设置为多个单元测试时出错
【发布时间】:2016-09-22 00:18:26
【问题描述】:

我使用 Angular2 RC1,我有几个关于不同组件的单元测试,结构如下:

import {provide} from '@angular/core';
import {
  TestComponentBuilder
} from '@angular/compiler/testing';

import {
  beforeEach,
  ddescribe,
  xdescribe,
  describe,
  expect,
  iit,
  inject,
  injectAsync,
  async,
  beforeEachProviders,
  setBaseTestProviders,
  it,
  xit
} from '@angular/core/testing';

import {
  TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
  TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS
} from '@angular/platform-browser-dynamic/testing/browser';

describe('Test component 1', () => {
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
    TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);

  it('should something',
    async(inject([TestComponentBuilder], (tcb: TestComponentBuilder) => {
      var updateService = new UpdateService();

      tcb.overrideProviders(ShapeCircleLayerComponent, [
        provide(UpdateService, { useValue: updateService })
      ])
      .createAsync(Component1).then((componentFixture) => {
        (...)
      });
    });
  });
});

如果单独运行每个测试都有效,但是当我在 Karma 中同时运行它们时,我收到以下错误:

Chrome 50.0.2661 (Linux 0.0.0) 测试 shape circle 层遇到声明异常 FAILED 错误:无法设置 /home/(...)/my-project 提供程序,因为它已被调用 在新的 BaseException (/home/(...)/my-project/node_modules/@angular/core/src/facade/exceptions.js:17:23) 在 Object.setBaseTestProviders (/home/(...)/my-project/node_modules/@angular/core/testing/test_injector.js:74:15) ```

似乎有几个测试设置了基础测试提供者(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS, TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS) 不能同时执行。

有人有这个问题吗?非常感谢!

【问题讨论】:

  • 你只需要setBaseTestProviders一次,试试把这个setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS, TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);移到业力入口文件
  • 这是一个很好的业力入口文件github.com/AngularClass/angular2-webpack-starter/blob/…

标签: unit-testing angular karma-runner


【解决方案1】:

正如@teleaziz 建议的那样,您应该只执行一次。所以这样的处理需要移到karma-test-shim.js文件中。这是一个示例:

System.import('@angular/platform-browser/src/browser/browser_adapter')
  .then(function(browser_adapter) { browser_adapter.BrowserDomAdapter.makeCurrent(); })
  .then(function() {
    return Promise.all([
      System.import('@angular/core/testing'),
      System.import('@angular/platform-browser-dynamic/testing/browser')
    ]);
  })
  .then(function(modules) {
    var testing = modules[0];
    var testingBrowser = modules[1];

    testing.setBaseTestProviders(
       testingBrowser.TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
       testingBrowser.TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);
    })
  .then(function() { return Promise.all(resolveTestFiles()); })
  .then(function() { __karma__.start(); }, function(error) { __karma__.error(error.stack || error); });

【讨论】:

    猜你喜欢
    • 2020-06-28
    • 2015-08-24
    • 1970-01-01
    • 2011-04-10
    • 2023-01-19
    • 1970-01-01
    • 2020-04-14
    • 2014-09-06
    • 1970-01-01
    相关资源
    最近更新 更多