Я бы порекомендовал издеваться над свойством target
вашего Controller
.Если запущено действие, которого нет на вашем контроллере, оно всплывает до target
.В случае контроллера это соответствующий маршрут.Как обычно, вы можете передать макет тестируемой конструкции на this.subject()
.Вы можете достичь того же, что и при использовании Sinon, но без введения другой зависимости и с хорошо читаемым кодом.
Предположим, у нас есть такой контроллер:
export default Controller.extend({
actions: {
sendActionToRoute() {
this.send('actionOnRoute');
}
}
});
Мы можем выполнить модульное тестирование sendActionToRoute
вот так:
test('it sends an action to route', function(assert) {
let controller = this.subject({
target: {
send(action) {
assert.step('send method of route');
assert.equal(action, 'actionOnRoute', 'correct action is triggered on route');
}
}
});
controller.send('sendActionToRoute');
assert.verifySteps(['send method of route']);
});
Пожалуйста, найдите тлеющий уголь, демонстрирующий этот подход: https://ember -twiddle.com / dd417cf8757607cdd669448c42ce7bbc? NumColumns = 2 & openFiles = controllers.my-controller.js% 2Ccont.my-controller.js