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
直接テストすることは可能ですか?actions.saveForm にアクセスできないのは sinon の制限ですか?