У меня есть одно действие, определенное в контроллере ember, который вызывает две отдельные функции, которые являются частью контроллера. Я хотел бы издеваться над этими функциями в модульном тесте, чтобы подтвердить, вызвал ли метод действия правильную функцию.Как протестировать контроллер ember
Мой контроллер выглядит следующим образом:
export default Ember.Controller.extend({
functionA() {
return;
},
functionB() {
return;
},
actions: {
actionMethod(param) {
if(param) {
return this.functionA();
}
else {
return this.functionB();
}
}
}
});
На практике, контроллер работает, однако в тестовом модуле, functionA и functionB оба не определены. Я попытался войти в консоль, но не могу найти там, где есть функция functionA и functionB, поэтому я не могу их правильно издеваться. Я ожидал, что они будут находиться на верхнем уровне объекта рядом с действиями, но вместо этого я нашел только _actions
с корректным определением actionMethod
.
Мой блок тест выглядит, как показано ниже
const functionA = function() { return; }
const functionB = function() { return; }
test('it can do something', function(assert) {
let controller = this.subject();
// I don't want the real functions to run
controller.set('functionA', functionA);
controller.set('functionB', functionB);
controller.send('actionMethod', '');
// raises TypeError: this.functionA is not a function
// this doesn't work etiher
// controller.functionB = functionB;
// controller.functionA = functionA;
// controller.actions.actionMethod();
}
Кто-нибудь есть какие-либо идеи о том, как я могу заменить эти функции в среде тестирования? Или, может быть, есть лучший способ проверить эту функциональность или настроить мой контроллер?
- редактировать опечатка: this.subject в this.subject()
Сторона Примечание: 1. Чтобы создать объект контроллера, вам нужно вызвать 'this.subject()'. 2. Метод 'controller.send' не возвращает никакого значения вызывающему абоненту – kumkanillam
Опечатка ооп - я назвал' this.subject() '. Что касается 'controller.send', я пробовал этот метод, как показано выше, а также вызывал' controller.actions.actionMethod() ' – user2989731