2015-12-07 15 views
8

仕様:EmberJSサービスインジェクション(エンバーQUnit)

  • エンバーバージョン:1.13.8
  • ノード:0.10.33
  • NPM:2.13.4

I have

import Alias from "../../../services/alias"; 
 
.... 
 

 
moduleFor("controller:test", "Controller: test", { 
 
    integration: true, 
 

 
    beforeEach: function() { 
 
    this.register('service:alias', Alias, {singleton: true}); 
 
    this.inject.service('alias', { as: 'alias' }); 
 
    this.advanceReadiness(); 
 
    }, 
 
}); 
 
... 
 

 
test('Alias Alias Alias ', function(assert) { 
 
    var controller = this.subject(); 
 

 
    //sample function 
 
    controller.send("test"); 
 
    assert.equal(true, controller.alias.get("alias"), "alias should be true"); 
 
});
(実際のコードを表示することが許可されていないため 'エイリアス'を例として使用します)

サービスを初期化しようとしましたが、Ember Qunitテスト中にコントローラにサービスが注入されませんでした。

がどのように私はユニットテストの間にそれを注入しない...どちらか動作しません、代わりにbeforeEachのinit()メソッド:

私はで注入を入れて試してみましたか?

デバッガにブレークポイントを設定して、コントローラにサービスがあるかどうかを確認しますが、テスト中は表示されません。しかし、通常のエバーサーブでは問題ありません。

答えて

7

サービスをインポートする必要はありません。以下のようなニーズにサービスを含める必要があります。例えばのために

moduleFor("controller:test", { 
    needs: ['service:alias'] 
}); 

サービス/

Em.service.extend({ 
    name: 'john' 
}); 

コントローラalias.js/

Em.Controller.extend({ 
    alias: Em.service.inject(), 

    test: function() { 
    alert(this.get('alias.name'); 
    } 
    }); 

テスト/ユニット/コントローラ/テスト-test.js

をtest.js
moduleFor('controller:test', { 
    needs: ['service:store'] 
}); 

test('Alias Alias Alias', function(assert) { 

    var controller = this.subject(); 
    assert.equal(controller.get('store.name'), 'john); 

    }); 

このテストを実行するには、Emberはcontroller testservice aliasのコンテナを生成します。したがって、名前の接頭辞を付けてサービスプロパティにアクセスできます。

+0

これは単体テストのember-simple-authセッションに関する私の問題を解決しました –