在ember中测试操作。js与sinon和konacha
-
21-12-2019 - |
题
我有一个简单的 route
在我的应用程序像这样:
Dash.PostsNewRoute = Em.Route.extend({
model: function() {
return this.store.createRecord('post');
},
actions: {
saveForm: function() {
this.modelFor('postsNew').save();
}
}
});
这是我写的测试 saveForm
并确保它被调用:
...
context('create new post', function() {
beforeEach(function() {
...
});
it('calls submit on route', function() {
var mock;
mock = sinon.mock(testHelper.lookup('route', 'posts.new'));
mock.expects('actions.saveForm').once();
this.submitButton.click();
mock.verify();
mock.restore();
});
});
但是,我得到一个错误与此实现:Attempted to wrap undefined property actions.saveForm as function
如果我改变路线,它是这样的测试,它会工作:
// Moving the save out of action and call it
Dash.PostsNewRoute = Em.Route.extend({
model: function() {
this.store.createRecord('post');
},
save: function() {
this.modelFor('postsNew').save()
},
actions: {
saveForm: function() {
this.save();
}
}
});
新的测试:
it('calls submit on route', function() {
var mock;
mock = sinon.mock(testHelper.lookup('route', 'posts.new'));
mock.expects('save').once();
this.submitButton.click();
mock.verify();
mock.restore();
});
这样测试就会通过。是否有可能测试 actions.saveForm
直接?是sinon的限制,阻止我访问动作。保存形式?
解决方案
你可以模拟动作哈希并像这样设置期望:
mock = sinon.mock(testHelper.lookup('controller', 'posts_new')._actions);
mock.expects('save').once();
this.submitButton.click();
mock.verify();
mock.restore();
不隶属于 StackOverflow