注射服务为一体的混入Ember2.3 +
问题描述:
我有,在我的单元测试套件的时候我尝试检查
因为
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
答
如果使用Ember.getOwner(target)
你不能只是.create()
目标,但inject the owner.与.create(owner.ownerInjection())
。通常,所有者是应用程序实例。
编辑:
您在实际使用getOwner
当你使用Ember.inject
。它就像这样的快捷方式:
sha: Ember.computed({
get() {
return Ember.getOwner(this).lookup('service:sha');
}
})
谢谢你的帮助。正如你所看到的,我根本不使用Ember.getOwner()。 我试着将create()更改为:let subject = DirtyRelationshipsDetectorObject.create – Pavol
我编辑了答案。它是一个单元测试,所以如果你使用这个服务,你会怎么看? – Lux
好吧,当你解释这个快捷方式的时候,现在很有意义。我是否明白 - 我不应该明确测试这个属性,而是模拟它(后来在我的测试套装中)呢? – Pavol