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

How can I set up mocha tests to run Ember initializers so injected objects are defined?

我的 Ember 应用程序通过初始化程序将 "i18n" 对象注入容器,稍后在控制器 'preferredLanguage' 计算 [=23] 中使用 "this.container.lookup('i18n:main')" 查找该对象=].

测试控制器 'preferredLanguage' 属性 的 mocha 单元测试因 "i18n is not defined" 而失败。如何将 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");
  });
});