【问题标题】:Karma + Jasmine + Angular2 + Webpack: coreTesting.setBaseTestProviders is not a functionKarma + Jasmine + Angular2 + Webpack:coreTesting.setBaseTestProviders 不是函数
【发布时间】:2017-04-17 14:57:02
【问题描述】:

尝试通过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"
  }
}

有人可以告诉我我在哪里错误地配置了整个东西吗?

【问题讨论】:

  • 你看过 Changelog 2.0.0-rc.5 (2016-08-09) 吗? github.com/angular/angular/blob/…setBaseTestProviders is deprecated and only supports platformProviders that are predefined by Angular. Use 'TestBed.initTestEnvironment' instead.
  • 是的。谢谢。刚刚找到了

标签: javascript angular webpack karma-jasmine


【解决方案1】:

测试 API 多次更改。测试入口文件的当前版本在存储库linked from this article 中可用。

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

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

TestBed 是一个处理测试环境要求的类。你可以在Angular's documentation了解更多。

【讨论】:

    【解决方案2】:

    确实,我使用了一种已弃用的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-06
      • 1970-01-01
      • 2019-12-31
      • 2017-01-14
      • 2017-08-31
      • 2017-04-27
      • 2017-01-10
      • 2017-05-03
      相关资源
      最近更新 更多