2

当我尝试检查注入到 Mixin 中的服务时,我的单元测试套件中弹出一个错误,因为该服务getOwner()已添加到 Ember 中(此处的弃用指南)。

这是我的混音:

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

4

1 回答 1

2

如果您使用Ember.getOwner(target),您不仅可以.create()目标,还可以注入所有者。.create(owner.ownerInjection()). 通常,所有者是一个应用程序实例。

编辑:

getOwner当你使用Ember.inject. 它就像一个捷径:

sha: Ember.computed({
  get() {
    return Ember.getOwner(this).lookup('service:sha');
  }
})
于 2016-05-12T15:34:35.187 回答