我的Ember app会注入一个" i18n"通过初始化程序将对象放入容器中,稍后使用" this.container.lookup(' i18n:main')"在控制器' preferredLanguage'计算属性。
摩卡单元测试,用于测试控制器" preferredLanguage'属性,由于未定义" i18n未定义"。如何设置mocha测试以运行Ember应用程序初始化程序,以便在单元测试期间从容器中查找时定义注入的对象?
答案 0 :(得分:2)
我发现主要问题是(如你所提到的)安装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");
});
});