如何设置mocha测试以运行Ember初始化程序,以便定义注入的对象?

时间:2015-05-07 23:31:25

标签: ember.js mocha testem

我的Ember app会注入一个" i18n"通过初始化程序将对象放入容器中,稍后使用" this.container.lookup(' i18n:main')"在控制器' preferredLanguage'计算属性。

摩卡单元测试,用于测试控制器" preferredLanguage'属性,由于未定义" i18n未定义"。如何设置mocha测试以运行Ember应用程序初始化程序,以便在单元测试期间从容器中查找时定义注入的对象?

1 个答案:

答案 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");
  });
});