Мне нужно написать тест, который устанавливает состояние, затем тест, чтобы узнать, вызвано ли stateManagerService. Я получаю сообщение об ошибке:
undefined не является объектом (оценка "vm.stateManagerService.go")
main.controller.js
export class MainController {
constructor($state, stateManagerService) {
'ngInject';
this.$state = $state;
if($state.current.name === 'main') {
stateManagerService.go('list');
}
}
}
unit test main.controller.spec.js
describe('controllers', () => {
let vm;
//
beforeEach(inject(($controller, $state, stateManagerService) => {
vm = $controller('MainController');
}));
it('should call stateManagerService when current name is main', ()=> {
vm.$state.current.name = 'main'
console.log(vm.$state.current.name)
expect(vm.stateManagerService.go()).toHaveBeenCalled();
});
Также (слегка не по теме) я все еще смущен, почему это. $ State = $ state требуется. Если не указано, я получаю сообщение об ошибке: состояние $ undefined.
Обновление: теперь получение ошибок
Ошибка: spyOn не смог найти объект для шпионажа для go() (строка 1887)
TypeError: undefined не является объектом (оценка "vm.stateManagerService.go")
stateManager.service.js
export class StateManagerService {
constructor($state, $stateParams, platformDetectService){
'ngInject';
//deps
this.$state = $state;
this.$stateParams = $stateParams;
this.isMobile = platformDetectService.isMobile;
//internal
this.lastStateName = null;
this.lastStateParams = null;
}
//storage method for current state
go (stateName, params){
this.lastStateParams = this.$stateParams.page;
this.lastState = this.$state.current.name.split('.')[1];
let nextState = (this.isMobile) ? 'mobile.' + stateName : 'map.' + stateName;
this.$state.go(nextState, params)
}
//returns last state or list
goBack (){
let lastState = this.lastState || 'list',
page = this.lastStateParams || null;
this.go(lastState, {page})
}
}
Вам нужно проверить на указателе функции, а не на возвращаемом значении функции.
Это должно было быть
expect(vm.stateManagerService.go).toHaveBeenCalled();
Обратите внимание на отсутствие ()
в go
vm.stateManagerService.go
помощьюspyOn(vm.stateManagerService, 'go')
.toHaveBeenCalled
для шпионов и.toHaveBeenCalled
- jasmine.github.io/2.0/introduction.html#section-Spies без вызова простоты метода