我正在嘗試編寫一個單元測試來測試我的控制器。我有一個在模型上使用計算屬性的計算屬性。如何在一個控制器的Ember.js單元測試中設置模型數據
我不確定如何設置測試以將數據加載到模型中。
在這裏,我有我的模型:
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('[email protected]')
});
而且在我的測試中,當我安裝了控制器的內容我這樣做:
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計算的財產不會被調用,因爲該模型數據不會被裝載(我相信)。當我打電話時,它會回到未定義狀態。
那麼如何將這些數據加載到模型中?
謝謝!
我還在尋找到瑞安的'IC-ajax'庫,我們選擇不要在我的代碼中使用它,但這是因爲我們已經寫燼測試了一年左右,所以它沒有增加我們的環境。 – Kingpin2k