2015-11-17 2 views
2

Я знаю, что здесь есть несколько тестовых вопросов $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'); 
}); 

Но это не работает, потому что она не называется, хотя я знаю, в контроллере она есть, какие-то предложения?

+0

Контроллер должен быть создан между 'spyOn' и 'ожидать', и это не так. – estus

+0

@estus Я вставляю контроллер в beforeEach вверху, как я тогда создаю экземпляр между шпионом? – gardni

+1

Никто не мешает вам выполнять «spyOn» in beforeEach. Это не имеет значения, если оно находится в «beforeEach» или «it», но шпион должен быть настроен до того, как будет вызвана функция spied. – estus

ответ

2
  1. В тестовой папке создайте новый файл с модулем stateMock. Скопируйте код с this gist.

  2. В тесте:

    beforeEach(module('stateMock')); 
    
    beforeEach(inject(function ($state) { 
        state = $state; 
        state.expectTransitionTo('home.default'); 
    })); 
    
    it('should return a state', function() { 
        // something happen and return true and you expect that 
        // $state.go('home.default') should work 
        expect(state.current.name).toBe('home.default'); 
    
        // if it does not happen, expect return false and state.expectTransitionTo return error 
    }); 
    
Смежные вопросы