4

私は ember-cli 0.0.35 を使用しており、初期化子を介してコンポーネントに依存関係を注入しています。開発ではうまく機能しますが、テストを実行するとプロパティが表示されません。テストでは loadInitializers が呼び出されているようですが、依存関係が this.subject({}); に表示されていません。

テストのために手動で注入したくありません。これを処理するより良い方法はありますか?

初期化子:

var FooServiceInitializer = {
  name: 'foo',
  initialize: function (container, application) {
   application.inject('component:foo', 'foo', 'service:foo');
  }
};
export default FooServiceInitializer;

失敗したテスト:

moduleForComponent('bar', 'Component: Bar', {
  setup: function() {
    App = startApp();
    component = this.subject({});
  },
  teardown: function () {
    Ember.run(App, App.destroy);
  }
});

test('Properties: foo', function() {
  // Make sure we injected the service
  ok(component.foo, 'foo is injected');
});
4

1 に答える 1

2

前に述べたように、この時点でコンテナーをテストしているので (ic-ajax によって作成されたミニ コンテナーではありません)、統合テストに適しています。

あなたの本当のテストはこれに沿っています

test("root lists 3 colors", function(){
  var c = App.__container__.lookup('component:foo-bar');
  ok(c.foo.blah);
});

テスト中にコンテナーを使用することに罪悪感を感じている場合 (そうすべきではありません)、ヘルパーを作成して、将来 API が変更された場合にあちこちで修正する必要がないようにすることができます。

Ember.Test.registerHelper('containerLookup',
  function(app, look) {
    return app.__container__.lookup(look);
  }
);

前にこれを定義してください

App.injectTestHelpers();

そして、あなたのテストは次のようになります

test("root lists 3 colors", function(){
  var c = containerLookup('component:foo-bar');
  ok(c.foo.blah);
});

http://emberjs.jsbin.com/doxigu/edit

于 2014-06-23T19:39:09.663 に答える