Я пытаюсь написать единичный тест, чтобы протестировать простой factory
, который выполняет http.get
для извлечения файла JSON.AngularJS - Единичный тест для http-доступа к файлу JSON
Завод вызван внутри моего контроллера.
Вот plunker показывает мой http.get: http://plnkr.co/edit/xg9T5H1Kreo4lwxzRQem?p=preview
Ctrl:
app.controller('MainCtrl', function($scope, $http, factoryGetJSONFile) {
factoryGetJSONFile.getMyData(function(data) {
$scope.Addresses = data.Addresses.AddressList;
$scope.People = data.Names.People;
});
});
Factory:
app.factory('factoryGetJSONFile', function($http) {
return {
getMyData: function(done) {
$http.get('data.json')
.success(function(data) {
done(data);
})
.error(function(error) {
alert('An error occured whilst trying to retrieve your data');
});
}
}
});
Тест:
// ---SPECS-------------------------
describe('with httpBackend', function() {
var app;
beforeEach(function() {
app = angular.mock.module('plunker')
});
describe('MyCtrl', function() {
var scope, ctrl, theService, httpMock;
beforeEach(inject(function ($controller, $rootScope, factoryGetJSONFile, $httpBackend) {
scope = $rootScope.$new(),
ctrl = $controller('MyCtrl', {
$scope: scope,
factoryGetJSONFile: theService,
$httpBackend: httpMock
});
}));
it("should make a GET call to data.json", function() {
console.log("********** SERVICE ***********");
httpMock.expectGET("data.json").respond("Response found!");
//expect(factoryGetJSONFile.getMyData()).toBeDefined();
httpMock.flush();
});
})
});
Ошибка:
TypeError: 'undefined' is not an object (evaluating 'httpMock.expectGET')
где вы определении объекта Theservice? – sam
, так как ваш код теперь будет компилироваться, только если вы запишете factoryGetJSONFile: factoryGetJSONFile, но он просто вызовет исходную услугу. Вы должны определить макет службы и поместить ее в службу – sam