2016-03-01 129 views
0

我已經使用webpack with help from this blog post設置了一個Angular項目,其中有an associated boilerplate on Github未找到Karma + Webpack角度控制器

該應用程序本身工作正常,但是當我運行業力它說它找不到它正在測試的控制器。

// karma.config.js 
module.exports = config => config.set({ 
    files: ['test.webpack.js'], 
    preprocessors: { 
    'test.webpack.js': ['webpack', 'sourcemap'] 
    }, 
    browsers: ['PhantomJS2'], 
    webpack: require('./webpack.config'), 
    webpackMiddleware: { 
    noInfo: 'errors-only', 
    }, 
}); 

// test.webpack.js 
import 'angular'; 
import 'angular-mocks/angular-mocks'; 

const testContext = require.context('./', true, /\.spec\.js$/); 
testContext.keys().forEach(testContext); 

我現在只有一個規格文件MainCtrl.spec.js。噶將運行它,但我得到的錯誤:

Argument 'MainCtrl' is not a function, got undefined

當我實際運行的應用程序,MainCtrl似乎加載就好了,所以我不知道爲什麼噶不能得到它。

我也試過將\.spec\.js更改爲\.js,但是這會導致更多的錯誤。

回答

1

我能夠通過反思一下工作流程來解決這個問題。兩個主要問題是module未從ngMocks全局導出(與節點導入系統存在衝突)。另一個是測試還必須首先加載所有模塊文件,這對於Karma來說非常典型。

// karma.config.js 
files: ['app/index.js', 'test.webpack.js'] 
preprocessors: { 
    'app/index.js': ['webpack'], 
    'test.webpack.js': ['webpack'], 
} 


// test.config.js 
/* Angular is already imported by app/index.js */ 
import 'angular-mocks/angular-mocks'; 

/* MUST use `angular.mock.module`. `module` alone won't work */  
beforeEach(angular.mock.module('ngculator')); 
const testContext = require.context('.', true, /\.spec\.js$/); 
testContext.keys().forEach(testContext);