У меня есть такая услуга.Как проверить HTTP-запрос в моем случае?
Просто попросите http получить запрос.
angular.module('myApp').service('TESTService', ['$http',
function($http) {
var request = function(url) {
return $http({
method: 'GET',
url: url
});
};
return {
get: function(url) {
return request(url);
}
};
}
]);
В мой контроллер, я назвал обслуживание
TESTService.get('/api/product' + id).success(
function(result) {
console.log(result)
}
);
Мне нужно написать модульный тест для него
describe('test here', function() {
var testCtrl, scope, httpBackend, testService;
// Initialize the controller and a mock scope
beforeEach(inject(function (_$controller_, _$rootScope_, _$httpBackend_, _TESTService_) {
scope = _$rootScope_.$new();
httpBackend = _$httpBackend_;
testService = _TESTService_;
testCtrl = _$controller_('testCtrl', {
$scope: scope
});
it('should return http data', function() {
var productData = {
data: [
{
obj: {
id:'123'
}
}
]
}
httpBackend.expectGET('/api/product/' + id).respond(productData);
TESTService.get('/api/product/' + id).
then(function(data) {
var result = data;
})
httpBackend.flush();
expect(result).toEqual(productData)
});
}));
После выполнения теста, я получил
Error: Unexpected request: GET /api/product/undefined
Как написать te чтобы убедиться, что он пройдет? Есть идеи? Большое спасибо!
Как и в случае с примечанием, тестирование службы, использующей '$ http', является интеграционным тестом, а не модульным тестом. Единичные тесты могут выполняться изолированно, без наличия серверов, баз данных и т. Д. Обычно вам не нужно делать такие интеграционные тесты, так как «$ http» уже известен функционалом от Angular и вашего backend-сервиса должны быть протестированы на сервере. В других тестах эта услуга будет издеваться. – Claies