2016-05-12 15 views
2

ユニットテストスイートでポップアップすると、サービスがに登録されているサービスにチェックインしようとすると、問題が発生します。getOwner()がEmberに追加されましたhere)。サービスをミックスインに注入するEmber2.3 +

これは私のミックスインである:

import Ember from 'ember'; 

export default Ember.Mixin.create({ 
    sha: Ember.inject.service('sha512'), 
}); 

これはわずか燃えさし-CLIによって生成された後に変更され、私の基本的なユニットテストです:

import Ember from 'ember'; 
import DirtyRelationshipsDetectorMixin from 'xamoom-customer/mixins/dirty-relationships-detector'; 
import { module, test } from 'qunit'; 

module('Unit | Mixin | dirty relationships detector'); 

test('it works', function(assert) { 
    let DirtyRelationshipsDetectorObject = Ember.Object.extend(DirtyRelationshipsDetectorMixin); 
    let subject = DirtyRelationshipsDetectorObject.create(); 
    assert.ok(subject); 
    assert.ok(subject.get('sha')); // problem occurs here 
}); 

私は取得していますエラーメッセージは非常に明確であるが、私解決策が見つかりませんでした:

Error: Assertion Failed: Attempting to lookup an injected property on an object without a container, ensure that the object was instantiated via a container.

サービスが実行されているときに、それはちょうど失敗したテスト。 エンバー2.5.1 - エンバー-CLI

答えて

1

あなたが使用している場合は2.5.0 Ember.getOwner(target)することができますだけでなく、.create()ターゲットが、.create(owner.ownerInjection())inject the owner.。通常、所有者はアプリインスタンスです。

編集:あなたはEmber.injectを使用するときは、実際に使用しているgetOwner

。そのためのショートカット:

sha: Ember.computed({ 
    get() { 
    return Ember.getOwner(this).lookup('service:sha'); 
    } 
}) 
+0

ありがとうございます。 Ember.getOwner()は使用していません。 私はcreate()を以下のように変更しようとしました: 'let subject = DirtyRelationshipsDetectorObject.create(Ember.getOwner(this).ownerInjection());' 'これはアプリケーションインスタンスではないので失敗します。 – Pavol

+1

回答を編集しました。ユニットテストなので、サービスを利用するとどうなるでしょうか? – Lux

+0

あなたがショートカットのことを説明したように、今、意味があります。私はそれをうまくやっていますか?私はこのプロパティを明示的にテストし、それを模擬すべきではありません。 – Pavol

関連する問題