繁体   English   中英

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

[英]Karma + Jasmine + Angular2 + Webpack: coreTesting.setBaseTestProviders is not a function

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

我的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"
  }
}

请有人请告诉我我在哪里错误配置了整件事情?

测试API多次更改。 当前版本的测试条目文件位于本文链接的存储库中。

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

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

TestBed是一个处理测试环境要求的类。 您可以在Angular的文档中了解更多相关信息

实际上,我使用了一种弃用的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM