要使用 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 的实际应用,可以在这里找到 这里