繁体   English   中英

如何在控制器的Ember.js单元测试中设置模型数据

[英]How to set model data in an Ember.js unit test for a controller

我正在尝试编写一个单元测试来测试我的控制器。 我有一个计算属性,在模型上使用计算属性。

我不确定如何设置测试以将数据加载到模型中。

我有我的模特:

App.User = DS.Model.extend({
  name: DS.attr('string'),
  roles: DS.hasMany('role'),

  isInstructor: function(){
    return this.hasRole('instructor');
  }.property('roles'),

  hasRole: function(role_name){
    var roles = this.get('roles');
    if(!Ember.isEmpty(roles)){
      return roles.any(function(role){
        return role.get('name') === role_name;
      });
    }
    return false;
  }
});

在这里,我有我的控制器:

App.MyClassDetailsController = Ember.ObjectController.extend({
  students: function () {
    return this.get('users').filter(function (user) {
      return !user.get('isInstructor');
    });
  }.property('content.users.@each')
});

在我的测试中,当我为控制器设置内容时,我这样做:

myClassDetailsController.set('model', Ember.ObjectProxy.create({
  id: 389,
  name: 'bfcoding 101',
  users: Ember.ArrayProxy.create({
    content: [
      Ember.ObjectProxy.create({id: 1, name: 'Joe', roles: Ember.ArrayProxy.create({content: [Ember.ObjectProxy.create({name: 'instructor'})]})}),
      Ember.ObjectProxy.create({id: 2, name: 'vs', roles: Ember.ArrayProxy.create({content: [Ember.ObjectProxy.create({name: 'student'})]})}),
      Ember.ObjectProxy.create({id: 3, name: 'Volcano', roles: Ember.ArrayProxy.create({content: [Ember.ObjectProxy.create({name: 'student'})]})})
    ]
  })
}));

这显然不能正确加载它。 因为我打电话给那个学生的方法:

myClassDetailsController.get('students.length')

它返回所有用户。

这是一个jsbin http://jsbin.com/zafod/1/

在jsbin中,当它过滤所有用户时,isInstructor计算属性永远不会被调用,因为模型数据从未被加载(我推测)。 当我拨打电话时,它返回未定义。

那么如何将该数据加载到模型中?

谢谢!

isInstructor住在实例App.User ,而不是Ember.ObjectProxy实例。 您需要在代理实例上创建App.User实例或仅定义isInstructor

就个人而言,我会做后者。 在一个完美的单元测试世界中,你正在测试控制器,而不是App.User所以其他一切都应该被嘲笑或推测工作完美。 显然,当您切换到集成测试时,这一切都会发生变化,但这又是单元测试。

Ember.ObjectProxy.create({id: 1, isInstructor: true, name: 'Joe', roles: Ember.ArrayProxy.create({content: [Ember.ObjectProxy.create({name: 'instructor'})]})}),

http://jsbin.com/vavikuka/1/edit

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM