var model, controller;
// Set up the controller in a new container.
// On tear down, set the variables to null,
// we reset the app on setup.
module('User Edit Controller', {
setup: function(){
AisisPlanner.reset();
controller = AisisPlanner.__container__.lookup('controller:user_edit');
model = AisisPlanner.User.store.createRecord('user', {
name: 'john doe',
userName: 'john_doe',
email: 'a@test.com',
bio: '',
pictureUrl: '',
role: 'Administrator'
});
controller.set('model', model)
},
teardown: function(){
controller = null;
model = null
}
});
test('capatalize_user_name', function(){
model.set('userName', 'John doe')
equal(controller.get('userName'), 'JOHN DOE', 'all caps');
});
以下测试很容易弄清楚正在做什么,从当前容器和模型设置控制器。然后在该模型中设置信息并在测试中使用它来输入名称。
问题是我收到了错误:
Setup failed on capatalize_user_name: 'undefined' is not an object (evaluating 'AisisPlanner.User.store.createRecord')
和
Died on test #2 global code@http://localhost:3000/assets/controllers/user_edit_controller_test.js?body=1:26:5: 'undefined' is not an object (evaluating 'model.set')
我从以下方面得到了这个想法:this blog post on how to test controllers.我认为它大部分已经过时但我尝试了它。任何想法如何解决这个问题?
答案 0 :(得分:2)
因此,要通过此测试,我必须执行以下操作:
var model, controller;
// Set up the controller in a new container.
// On tear down, set the variables to null,
// we reset the app on setup.
module('User Edit Controller', {
setup: function(){
AisisPlanner.reset();
Ember.run(function(){
controller = AisisPlanner.__container__.lookup('controller:user_edit');
model = controller.get('store').createRecord('user', {
name: 'Jhon Doe',
userName: 'John_Doe',
email: 'a@test.com',
bio: '',
pictureUrl: '',
role: 'Administrator'
});
controller.set('model', model)
});
},
teardown: function(){
controller = null;
model = null
}
});
test('capatalize_user_name', function(){
Ember.run(function(){
model.set('userName', 'JOHN DOE')
equal(controller.get('userName'), 'JOHN DOE', 'all caps');
});
});
Ember.run()
必须围绕它自己的控制器/模型的测试和设置。
然后必须将测试更改为将模型userName设置为JOHN DOE,因为set表示您正在设置某些内容,因此控制器不能像“哦,是的,john doe是大写的。”
答案 1 :(得分:0)
模型类上不存在商店,但它在控制器上存在
controller = AisisPlanner.__container__.lookup('controller:user_edit');
model = controller.get('store').createRecord('user', {....
在Ember运行语句中包装任何失败的行(我不确定这是否是失败的行,只是一个例子)
Em.run(function(){
controller.set('model', model);
});