O teste de acções em ember.js com a sinon e konacha
-
21-12-2019 - |
Pergunta
Eu tenho um simples route
no meu aplicativo como este:
Dash.PostsNewRoute = Em.Route.extend({
model: function() {
return this.store.createRecord('post');
},
actions: {
saveForm: function() {
this.modelFor('postsNew').save();
}
}
});
Aqui está o teste que eu escrevi para testar saveForm
e garantir que ele é chamado:
...
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();
});
});
No entanto, eu recebo um erro com essa implementação:Attempted to wrap undefined property actions.saveForm as function
Se eu alterar a rota e teste como este, ele vai trabalhar:
// 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();
}
}
});
O novo teste:
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();
});
Desta forma, o teste vai passar.É possível testar actions.saveForm
diretamente?É a limitação da sinon, que me impede de acessar as ações.saveForm?
Solução
Você pode zombar de ações de hash e definir as expectativas para ele assim:
mock = sinon.mock(testHelper.lookup('controller', 'posts_new')._actions);
mock.expects('save').once();
this.submitButton.click();
mock.verify();
mock.restore();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow