2

私の Ember アプリは、イニシャライザを介してコンテナに「i18n」オブジェクトを注入します。これは後で、コントローラの「preferredLanguage」計算プロパティの「this.container.lookup('i18n:main')」で検索されます。

コントローラーの「preferredLanguage」プロパティをテストする mocha 単体テストが、「i18n が定義されていません」という理由で失敗します。単体テスト中にコンテナから検索されたときに注入されたオブジェクトが定義されるように、Ember アプリケーション初期化子を実行するように mocha テストを設定するにはどうすればよいですか?

4

1 に答える 1

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

于 2015-07-20T02:49:51.393 に答える