由于getOwner()
已添加到Ember中,当我尝试检查注入Mixin的服务时,我的单元测试套件中弹出了一个错误,我遇到了一个问题(此处为弃用指南)。
这是我的混音:
import Ember from 'ember';
export default Ember.Mixin.create({
sha: Ember.inject.service('sha512'),
});
这是我的基本单元测试,在由ember 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
});
我得到的错误信息很清楚,但我还没有找到解决方案:
错误:断言失败:正在尝试查找上的注入属性没有容器的对象,请确保该对象已实例化通过容器。
当应用程序运行时,服务就在那里,只是测试失败了。Ember 2.5.1-Ember CLI 2.5.0
如果使用Ember.getOwner(target)
,则不仅可以将.create()
作为目标,还可以注入所有者。用CCD_ 4。所有者通常是应用程序实例。
编辑:
当您使用Ember.inject
时,实际上您正在使用getOwner
。这就像是一条捷径:
sha: Ember.computed({
get() {
return Ember.getOwner(this).lookup('service:sha');
}
})