Сценариемуглового блока испытание изменение состояния с решимостью
Я построил форму поиска с 2 состояниями: Первого состояния запускает второй (OnClick), и устанавливает некоторые параметры состояния с $ state.go функции(). Второе состояние имеет функцию разрешения, которая получает параметр состояния и решает результаты поиска.
Этот подход кажется более чистым способом сделать это, опираясь на классический подход: ввести службу поиска в состояние, получить результаты, сохранить их в службе поиска, изменить состояние и загрузить результаты из введенной службы.
Вопрос
Как сделать модульное тестирование для этого?
Первоначальная идея заключается в том, что я должен сделать тест, который «должен вызвать поиск с помощью поиска и перейти к странице результатов». Он терпит неудачу, потому что состояния не разрешают правильно с жасмином. Иногда это «заблокировано» в первом состоянии, в других сценариях состояние всегда «».
Когда я удалял блок разрешения из конфигурации, он работает так, как ожидалось, и тесты проходят, поэтому проблема явно находится в блоке разрешения. Странно, что я не получаю ошибки «неизвестного провайдера».
Любые мысли или идеи, как это исправить?
Ближайший вопрос о StackOverflow был таков: Angular ui router unit testing (states to urls) Но пользователь вызывает изменение состояния вручную, в то время как в моем случае это вызывается другой функцией.
Unit код теста:
describe('SearchController tests', function(){
var ctrl, $state, $rootScope, $httpBackend;
// instantiate the app to provide all the dependencies
beforeEach(module('MyApp'));
beforeEach(inject(function($controller, _$state_, _$rootScope_, _$httpBackend_) {
ctrl = $controller('SearchController', {});
$state = _$state_;
$httpBackend = _$httpBackend_;
$rootScope = _$rootScope_;
// mocking the views
// (instead of including stateMock script from the post, just to simplify)
$httpBackend.expectGET("search.html").respond("<input ng-model='vm.searchTerm'><button ng-click='vm.search()'>Search</button>");
$httpBackend.expectGET("search-results.html").respond("<div ng-repeat='res in vm.results'> {{ res }}</div>");
$state.go('search');
$rootScope.$digest();
}));
it('should trigger a search with searchTerm "rabbit" and change state to search results page', function(){
ctrl.searchTerm = 'rabbit';
$state.go('search');
ctrl.search();
$rootScope.$digest();
expect($state.current.name).toBe('search-results');
})
});
Plunker
http://plnkr.co/edit/6qiYCvCu1LftLzQRyTJy?p=preview
plunker please ... –
Я думаю, что это пересекает линию в интеграционное тестирование. – BobDoleForPresident