Я знаю, что здесь есть несколько тестовых вопросов $state.go
, но ни один из них не работает для меня. У меня есть простая логика контроллера, которая выбирает состояние.
if (true) {
$state.go('home.default');
} else {
$state.go('home.new');
}
Для того, чтобы проверить состояние которых удар я попытался следующее:
it('should return a state', function() {
spyOn($state, 'go');
$state.go('home.default');
expect($state.go).toHaveBeenCalledWith('home.default');
});
это всегда работает из-за линии $state.go('home.default');
, которая в основном делает тест излишним, потому что я просто звоню в котором я хочу, чтобы проверить его. Я хочу посмотреть, какое состояние контроллер вызывает.
Я бы ожидать, что тест будет что-то вроде этого:
it('should return a state', function() {
spyOn($state, 'go');
expect($state.go).toHaveBeenCalledWith('home.default');
});
Но это не работает, потому что она не называется, хотя я знаю, в контроллере она есть, какие-то предложения?
Контроллер должен быть создан между 'spyOn' и 'ожидать', и это не так. – estus
@estus Я вставляю контроллер в beforeEach вверху, как я тогда создаю экземпляр между шпионом? – gardni
Никто не мешает вам выполнять «spyOn» in beforeEach. Это не имеет значения, если оно находится в «beforeEach» или «it», но шпион должен быть настроен до того, как будет вызвана функция spied. – estus