Karma + Jasmine + Angular2 + Webpack:coreTesting.setBaseTestProviders不是函数

时间:2016-12-02 16:16:30

标签: javascript angular webpack karma-jasmine

尝试通过this文章设置一些测试系统。这或多或少都是可以理解的,但是我遇到了一个我目前无法解决的错误。

我的karma.entry.js

require('es6-shim');
require('reflect-metadata');
require('zone.js/dist/zone');
require('zone.js/dist/long-stack-trace-zone');
require('zone.js/dist/jasmine-patch');
require('zone.js/dist/async-test');
require('zone.js/dist/fake-async-test');
require('zone.js/dist/sync-test');


const browserTesting = require('@angular/platform-browser-dynamic/testing');
const coreTesting = require('@angular/core/testing');


coreTesting.setBaseTestProviders(
   browserTesting.TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
   browserTesting.TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS
);

const context = require.context('..\\srs\\', true, /\.spec\.ts$/);
context.keys().forEach(context);
Error.stackTraceLimit = Infinity;
jasmine.DEFAULT_TIMEOUT_INTERVAL = 2000;

运行“npm test”会导致错误:

Uncaught TypeError: coreTesting.setBaseTestProviders is not a function
at webpack:///karma/karma.entry.js:15:0 <- karma.entry.js:61

据我所知,require('@angular/core/testing');没有返回我需要的对象。我在这里看到了类似的主题,但到目前为止没有任何作用。 我理解,在某个地方,依赖性缺失,但无法确定究竟在哪里。

我的karma.conf.js

'use strict';

module.exports = (config) => {
config.set({
    autoWatch: true,
    browsers: ['Chrome'],
    files: [
        '../node_modules/es6-shim/es6-shim.min.js',
        'karma.entry.js'
    ],
    frameworks: ['jasmine'],
    logLevel: config.LOG_INFO,
    phantomJsLauncher: {
        exitOnResourceError: true
    },
    preprocessors: {
        'karma.entry.js': ['webpack', 'sourcemap']
    },
    reporters: ['dots'],
    singleRun: false,
    webpack: require('..\\webpack\\webpack.test'),
    webpackServer: {
        noInfo: true
    }
});
};

我的package.json似乎具有所有必要的依赖关系:

{
 ...
  "dependencies": {
    "@angular/common": "^2.2.4",
    "@angular/compiler": "^2.2.4",
    "@angular/core": "^2.2.4",
    "@angular/forms": "^2.2.4",
    "@angular/http": "^2.2.4",
    "@angular/platform-browser": "^2.2.4",
    "@angular/platform-browser-dynamic": "^2.2.4",
    "@angular/router": "^3.2.4",
    "es6-shim": "^0.35.1",
    "reflect-metadata": "^0.1.8",
    "rxjs": "^5.0.0-beta.12",
    "zone.js": "^0.6.12"
   },
  "devDependencies": {
    "@types/core-js": "^0.9.35",
    "html-webpack-plugin": "^2.24.1",
    "jasmine-core": "^2.5.2",
     "karma": "^1.3.0",
   "karma-chrome-launcher": "^2.0.0",
    "karma-jasmine": "^1.0.2",
    "karma-phantomjs-launcher": "^1.0.2",
    "karma-sourcemap-loader": "^0.3.7",
    "karma-webpack": "^1.8.0",
    "phantomjs-prebuilt": "^2.1.13",
    "raw-loader": "^0.5.1",
    "ts-loader": "^1.2.2",
    "tslint": "^4.0.2",
    "tslint-loader": "^3.2.1",
    "typescript": "^2.0.10",
     "typings": "^2.0.0",
    "webpack": "^1.13.3",
    "webpack-dev-server": "^1.16.2"
  }
}

有人可以告诉我我在哪里错误配置了整件事吗?

1 个答案:

答案 0 :(得分:2)

测试API多次更改。存储库linked from this article中提供了当前版本的测试条目文件。

基本上,您现在应该做的是使用core/testing模块中公开的TestBed类,而不是直接调用现在删除的setBaseTestProviders方法。

...
coreTesting.TestBed.resetTestEnvironment();
coreTesting.TestBed.initTestEnvironment(
    browserTesting.BrowserDynamicTestingModule,
    browserTesting.platformBrowserDynamicTesting()
);

TestBed是一个处理测试环境要求的类。您可以在Angular's documentation中了解有关它的更多信息。