若要使用 ember.js 執行 JavaScript 單元和整合測試,請遵循以下步驟
安裝 qunit 插件
npm install karma-qunit --save-dev
安裝 ember 前置處理器插件
npm install karma-ember-preprocessor --save-dev
產生 karma 的設定檔
karma init
注意:以上步驟將引導您完成基本設定。以下是一個適用於 ember.js/qunit 和 phantomjs 的範例設定檔
module.exports = function(config) {
config.set({
basePath: 'js',
files: [
'vendor/jquery/jquery.min.js',
'vendor/handlebars/handlebars.js',
'vendor/ember/ember.js',
'app.js',
'tests/*.js',
'templates/*.handlebars'
],
browsers: ['PhantomJS'],
singleRun: true,
autoWatch: false,
frameworks: ['qunit'],
plugins: [
'karma-qunit',
'karma-ember-preprocessor',
'karma-phantomjs-launcher'
],
preprocessors: {
'**/*.handlebars': 'ember'
}
});
};
注意:上述的 `files` 區段應包含所有依賴項,例如 jQuery/handlebars/ember.js,以及部署和執行您的生產環境 ember.js 應用程式所需的 js 和 handlebars 檔案
注意:測試 ember 應用程式時,重要的是 karma 在 ember 應用程式完成初始化之前不要嘗試執行測試。您需要在上述的 `files` 區段中包含一個小型啟動檔案來強制執行此操作。以下是一個範例
__karma__.loaded = function() {};
App.setupForTesting();
App.injectTestHelpers();
//this gate/check is required given that standard practice in Ember tests to is to call
//Ember.reset() in the afterEach/tearDown for each test. Doing so, causes the application
//to 're-initialize', resulting in repeated calls to the initialize function below
var karma_started = false;
App.initializer({
name: "run tests",
initialize: function(container, application) {
if (!karma_started) {
karma_started = true;
__karma__.start();
}
}
});
新增一個簡單的 Qunit 測試
test('one should equal one', function() {
equal(1, 1, 'error: one did not equal one');
});
從命令列使用 karma 執行測試
karma start
您可以在 這裡 找到一個簡單的單元/整合測試範例應用程式,展示 karma/qunit/ember 的實際應用