0

「ニーズ」を追加する前は、コントローラーは次のように見えました

var MyController = Ember.ArrayController.extend({
    wat: function() {
        return true;
    }.property()
});

これにより、非常に単純な単体テストを次のように書くことができました

test('wat always returns true ... huh', function() {
    var controller = new MyController();
    var wat = controller.get('wat');
    ok(wat);
});

しかし、そのように「ニーズ」ブロックを追加した後...

var MyController = Ember.ArrayController.extend({
    needs: 'application',
    wat: function() {
        return true;
    }.property()
});

「新しいアップ」は機能せず、QUnit / ember は次のようなエラーをスローしています

「このコントローラがコンテナでインスタンス化されていることを確認してください」

「プルイン/ ember-qunitを使用する」と言わずに、他にどのようなオプションがありますか? コンテナーの要件を満たすために、単純に「スタブ」をスラムできますか?

4

1 に答える 1

1

ember-qunit (私はこれが一番のファンではありません) を使用するthis.subject()と、次のようにモジュールを使用して設定するコントローラーを取得できます。

moduleFor('controller:comments', 'Comments Controller', {
  needs: ['controller:post']
});

http://emberjs.com/guides/testing/testing-controllers/#toc_testing-controller-needs

Ember Qunit を使用していない場合は、コンテナーを使用してコントローラーを取得できます (テスト時に初期化された依存関係は存在しません)。ここにヘルパーがあります:

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

そして、次のように簡単に使用できます。

test("root lists 3 colors", function(){
  var c = containerLookup('controller:foo');

  ok(c.get('controllers.bar.tr'));
  ok(!c.get('controllers.bar.fa'));
});

例: http://emberjs.jsbin.com/tumeko/edit

于 2014-10-24T03:00:51.367 に答える