2016-05-12 124 views
2
我有,在我的单元测试套件的时候我尝试检查 因为getOwner()注入密新服务已加入灰烬弹出一个错误的问题

(弃用指南here)。注射服务为一体的混入Ember2.3 +

这是我的mixin:

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 2.5.0

回答

1

如果使用Ember.getOwner(target)你不能只是.create()目标,但inject the owner..create(owner.ownerInjection())。通常,所有者是应用程序实例。

编辑:

您在实际使用getOwner当你使用Ember.inject。它就像这样的快捷方式:

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

谢谢你的帮助。正如你所看到的,我根本不使用Ember.getOwner()。 我试着将create()更改为:let subject = DirtyRelationshipsDetectorObject.create – Pavol

+1

我编辑了答案。它是一个单元测试,所以如果你使用这个服务,你会怎么看? – Lux

+0

好吧,当你解释这个快捷方式的时候,现在很有意义。我是否明白 - 我不应该明确测试这个属性,而是模拟它(后来在我的测试套装中)呢? – Pavol