Как выполнить модульный тест для Http Get без использования HTTP-бэкэнда, я хочу имитировать бэкэнд вместо того, чтобы делать настоящий вызов с HTTP-бэкэндом.
Я использую Jasmine, Karma runner с Angular версии 1?
Это мой текущий код, который работает, но использует серверную часть HTTP:
describe('appService', function() {
beforeEach(module('msApp.services'));
beforeEach(module('msApp.environment'));
var scope, appServiceMock, httpBackendMock, environment;
describe('service tests', function() {
beforeEach(inject(function($rootScope, $injector, Environment) {
scope = $rootScope.$new();
environment = Environment;
//I want to mock the httpBackend bit here:
httpBackendMock = $injector.get('$httpBackend');
appServiceMock = $injector.get('AppService');
}));
afterEach(function() {
httpBackendMock.verifyNoOutstandingExpectation();
httpBackendMock.verifyNoOutstandingRequest();
});
it('Test 1 - call login user', function() {
var user = {};
spyOn(appServiceMock, 'loginUser');
appServiceMock.loginUser(user, jasmine.any(Function), jasmine.any(Function));
expect(appServiceMock.loginUser).toHaveBeenCalledWith(user, jasmine.any(Function), jasmine.any(Function));
});
it("Test 2 - call http directly", function(){
var taskId = 1;
httpBackendMock.expectGET(environment.apiURL + 'Tasks/GetTask?sessionId='+ scope.session + "&taskId=" + taskId)
.respond(200, data);
function mockSuccessFunction(){return true;};
appServiceMock.getTask(taskId, mockSuccessFunction, jasmine.any(Function));
httpBackendMock.flush();
})
});
});