2016-12-02 34 views
2

試圖通過this文章設置一些測試系統。這或多或少都是可以理解的,但是我有一個我目前無法解決的錯誤。Karma + Jasmine + Angular2 + Webpack:coreTesting.setBaseTestProviders不是函數

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; 

運行 「故宮測試」 結果錯誤:

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

可能有人請您告訴我在哪裏,我究竟有錯誤配置整個事情?

+0

你見過更改日誌2.0.0-rc.5(2016-08-09)? https://github.com/angular/angular/blob/aa4bd14b3f3ddc7a08192589a9bb3931edf426e9/CHANGELOG.md#200-rc5-2016-08-09'setBaseTestProviders已棄用,僅支持由Angular預定義的platformProviders。改用'TestBed.initTestEnvironment'。' – yurzui

+0

是的。日Thnx。剛剛找到它 –

回答

2

測試API多次更改。當前版本的測試條目文件在存儲庫linked from this article中可用。

基本上,您現在應該做的是使用core/testing模塊中公開的TestBed類,而不是直接調用現在刪除的setBaseTestProviders方法。

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

TestBed是一個處理測試環境要求的類。你可以在Angular's documentation中瞭解更多。

0

的確,我已經使用了一個不推薦的方法。

相關問題