如何在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'})]})})
]
})
}));
显然不能正确加载。因为当我调用student方法时:
myClassDetailsController.get('students.length')
返回所有的用户。
这是一个jsbin http://jsbin.com/zafod/1/
在jsbin中,当它过滤所有用户时,isInstructor computed属性永远不会被调用,因为从未加载模型数据(我认为)。当我调用它时,它返回undefined
那么我如何将数据加载到模型中呢?
谢谢!
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 相关文章:
- 我的单元测试选项是什么
- 如何在Angular单元测试中从另一个控制器的rootScope将方法添加到rootScope中
- 使用量角器的当前url单元测试的getTitle
- AngularJS指令单元测试中未定义的函数
- 如何在ember单元测试中模拟_super()方法
- 单元测试依赖关系没有被嘲笑
- 为什么不'当单元测试出现解析错误时,我的因果报应测试会失败
- 在node.js中编写单元测试的最佳方式是什么
- Ng点击-如何进行行为单元测试
- Jasmine单元测试在监视服务方法时失败
- Angular 2和服务单元测试
- 在我的目录结构中,将单元测试助手源文件放在哪里
- 测试iFrame的位置.href是在jasmine单元测试中设置的
- 如何为多个需求模块设置单元测试
- 在角度单元测试中将form设置为$valid
- 用于单元测试和运行基于浏览器的 Web 应用程序的 Javascript 日志记录设置
- 手动设置buildcontroller(单元测试)
- 如何在角度单元测试中设置html5Mode?利用因果报应
- 使用Resharper测试运行器时,如何在单元测试中设置断点?
- 如何在Ember.js的控制器单元测试中设置模型数据