Я искал последние дни, но не могу приблизиться к решению. Я пытаюсь высмеять HTTP-запрос, запрошенный угловым контроллером.Жасмин/Карма HTTP не высмеивается, как ожидалось (Угловой контроллер при вызове REST)
угловой контроллер:
myController = function ($http, appConfig) {
$http.post(appConfig.restPath+"/administration/imports", {
}).then(function(data){
$scope.pagination = data;
$scope.totalItems = data.data.content.length;
$scope.totalPages = data.data.totalPages;
$scope.pages = [];
$scope.imports = data.data;
for (var i = 0; i < $scope.totalPages; i++){
$scope.pages.push(i);
}
});
}
и тест:
describe('Controller: myController', function() {
// load the controller's module
beforeEach(module("myModule"));
var controller,
scope, httpBackend, myPost;
// Initialize the controller and a mock scope
beforeEach(inject(function ($injector) {
httpBackend = $injector.get('$httpBackend');
myPost = httpBackend.whenPOST('http://localhost:9000/api/v1/administration/imports').respond({data: {content: ["a", "b"], totalPages: "1"}}, "");
scope = $injector.get('$rootScope');
var $controller = $injector.get('$controller');
createController = function() {
return $controller(myController, {'$scope' : scope });
};
}));
afterEach(function() {
httpBackend.verifyNoOutstandingExpectation();
httpBackend.verifyNoOutstandingRequest();
});
it('should browse the list of imported files', function() {
httpBackend.expectPOST('http://localhost:9000/api/v1/administration/imports');
var controller = createController();
httpBackend.flush();
});
});
Но, кажется, что он хочет спросить сервер для реальных данных, когда я проверить тест на хромированной консоли (сеть трафик -> HTTP-запросы показывают мне, что он запрашивает сервер вместо загрузки издевающихся данных ...), но он получает 403 (запрещено).
ошибка я получаю от кармы заключается в следующем:
TypeError: Cannot read property 'length' of undefined at myController.js:35:40
строке 35:
$scope.totalItems = data.data.content.length;
, что заставляет меня думать, что он пытается загрузить данные из службы REST, получает 403, пустой результат (означает data == {}
), а затем он пытается получить доступ к data.data.content.length
, который не определен ....
, как вы можете видеть, что я сделал это так же, как Google рекомендует ...
https://docs.angularjs.org/api/ngMock/service/ $ httpBackend
Другие примеры на SO или где-либо еще выглядят очень похоже. Что я делаю не так?
Непонятно, как это происходит, потому что настоящие запросы не должны выполняться в модульных тестах, тот факт, что у вас есть доступ к mocked '$ httpBackend', говорит о том, что настоящий' $ httpBackend' уже недоступен в данный момент. Это может произойти в приложении, которое неправильно использует «angular.injector» или что-то в этом роде, а не в обычном приложении. Можете ли вы воссоздать проблему на Plunker или Jsfiddle? Btw, 'myController' здесь' $ controller (myController, {'$ scope': scope}) 'не определен, но он не связан с проблемой. – estus
i can not get the fiddle working bro ... http: //jsfiddle.net/E64Se/106/ – messerbill
В нем используется Jasmine 1.3, а не 2, не уверен, как он ожидает загрузки тестов. Вот шаблон для plunker, http://plnkr.co/edit/ICFsukgLrM45mwROZEqi?p=info – estus