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 アプリケーションのテストでは、Ember アプリケーションの初期化が完了するまで、Karma でテストが実行されないようにすることが重要です。これを実現するには、上記の 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 が動作する簡単なユニット/統合テスト済みサンプルアプリは こちら にあります