我的 Ember 应用程序通过初始化程序将“i18n”对象注入容器,稍后在控制器“preferredLanguage”计算属性中使用“this.container.lookup('i18n:main')”查找该对象。
测试控制器“preferredLanguage”属性的 mocha 单元测试由于“未定义 i18n”而失败。如何设置 mocha 测试以运行 Ember 应用程序初始化程序,以便在单元测试期间从容器中查找时定义注入的对象?
我发现主要问题是(正如你提到的)是安装 mocha 时 start-app.js 文件不运行。我也为此奋斗了一段时间,但最终改进了让 Ember 和 Mocha 玩得很好的过程。首先,您必须正确设置 ember-cli-mocha 和 ember-mocha。然后,您可以在您的 tests/test-helper.js 文件中显式导入和调用 startApp 函数,以让 Ember 运行并注入测试助手,就像它通常对 qunit 所做的那样。这是 ember-cli 1.13.1 对我有用的。
bower install ember-mocha
bower install ember-test-helpers
npm install ember-cli-mocha
ember install ember-cli-mocha (say Y to overwrite test-helper.js)
然后在 tests/test-helper.js
// tests/test-helper.js
import resolver from './helpers/resolver';
import { setResolver } from 'ember-mocha';
// startApp doesn't run with mocha... so we run it explicitly
import startApp from "./helpers/start-app";
startApp();
setResolver(resolver);
之后,您可以创建生成路由或控制器,ember-cli-mocha 将创建测试,您应该可以访问诸如 visit() 和 currentURL() 之类的帮助程序;尽管我发现您需要实际设置路由和控制器才能使它们正常工作。
it("should have use of ember's test helpers", function() {
visit("/mocha-test");
andThen(function() {
var url = currentURL();
expect(url).to.equal("/mocha-test");
});
});