如何修复EmberJS集成测试的“服务注入”?

时间:2019-09-09 22:31:07

标签: ember.js integration-testing ember-qunit

我有一个使用“当前用户”服务的任务表组件。我将服务注入到如下所示的组件中

import { inject as service } from '@ember/service';
export default Component.extend({
   currentUser: service(),
   showBatchAction: computed('currentUser.user.directRoles.@each.title', function() {
    return this.get('currentUser.user.directRoles').toArray().some((role) => {
      return (role.id == 13) || (role.id == 15)
    });
  }),
});

代码可以正常工作,但是集成测试失败。

测试:

module('Integration | Component | tasks-table export csv button', function(hooks) {
  setupRenderingTest(hooks);

  hooks.beforeEach(function() {
    run(() => {
      this.owner.unregister('service:current-user');
    });

    this.owner.register('serivce:current-user', Service.extend({
      user: EmberObject.create({
        first_name: 'Bob',
        last_name: 'Newby',
        role: 'client',
        directRoles: {title: 'employee', id: 1}
      })
    }));
  });

  test('it renders', async function(assert) {
    var component = this.subject({
      authManager: stubMyService.create()
    });
    await render(hbs `{{tasks-table}}`);

    assert.equal(this.$('.export-csv').text().trim(), 'Export as CSV');
  });

});

我得到的错误是:TypeError:undefined不是对象(正在评估'this.get('currentUser.user.directRoles')。toArray')

1 个答案:

答案 0 :(得分:0)

directRoles不是数组吗?您如何遍历(某种方法)对象。通过说object.toArray()不起作用。

相关问题