我正在尝试编写一个单元测试来测试我的控制器。我有一个计算属性,它在模型上使用计算属性。
我不确定如何设置测试以将数据加载到模型中。
在这里,我有我的模型:
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 计算属性,因为从未加载过模型数据(我假设)。当我拨打电话时,它会返回未定义。
那么如何将这些数据加载到模型中呢?
谢谢!