2016-03-23 4 views
0

Я пытаюсь написать интеграционный тест с использованием кармы. Мне нужно сделать настоящий http-вызов и получить реальный ответ. Я пробовал все решения, упомянутые в # 1434, например, используя passthrough() и комментируя «$ httpBackend: angular.mock. $ HttpBackendProvider» в angular-mocks.js, и никто из них не работал.Можем ли мы сделать настоящий http-вызов в карма-тесте?

Вот мой тестовый код:

use strict'; 

describe('module: main, service: AuthService', function() { 
beforeEach(module('ngMockE2E')); 
// load the service's module 
beforeEach(module('main')); 
// load all the templates to prevent unexpected $http requests from ui-router 
beforeEach(module('ngHtml2Js')); 

// instantiate service 
var AuthService; 
var $q; 
var deferred; 
var $rootScope; 

var response; 

var scope, http, flush, httpBackend; 

beforeEach(inject(function ($httpBackend,AuthService,$q, $rootScope) { 
httpBackend = $httpBackend; 

AuthService = AuthService; 
$q = $q; 
$rootScope = $rootScope; 
deferred = $q.defer(); 

scope = $rootScope.$new(); 
})); 

it('should do something', function() { 
expect(!!AuthService).toBe(true); 
expect(AuthService).not.toBeNull(); 

}); 

it('verify authenticating user', function() { 
AuthService.authUser('[email protected]','abc123').then(function (result) { 
console.log("Result of successful auth user is "); 
console.log(result); 
expect(result).toEqual(true); 
done(); 
}, function (error) { 
console.log("error of failure auth user is ",error); 
expect(false).toBe(true); 
done(); 
}); 
httpBackend.whenPOST('/oauth/token').passThrough(); 
$rootScope.$digest(); 
//httpBackend.flush(); 
}); 

}); 

Это будет здорово, если кто-нибудь есть какое-либо решение для этого, чтобы сделать реальный вызов HTTP в тесте кармы

+0

Во время тестирования, мы хотим, чтобы наши тесты, чтобы быстро бегать и не имеют внешних зависимостей, так что мы не хотим, чтобы отправить XHR или JSONP запросы к реальному серверу. Все, что нам действительно нужно, это проверить, был ли отправлен какой-либо запрос или нет, или просто разрешить приложению делать запросы, отвечать предварительно подготовленными ответами и утверждать, что конечный результат - это то, что мы ожидаем. – user1645290

ответ

0

Когда Угловая приложение нуждается в некоторых данных с сервера , он вызывает службу $ http, которая отправляет запрос на реальный сервер, используя службу $ httpBackend. При инъекции зависимостей легко вводить $ httpBackend mock (который имеет тот же API, что и $ httpBackend), и использовать его для проверки запросов и ответа с некоторыми данными тестирования без отправки запроса на реальный сервер.

Try и изменять в соответствии с вашими данными,

it('verify authenticating user', 
function() { 

httpBackend.expect('POST', '/oauth/token') 
    .respond(200, "[{ success : 'true', id : 123 }]"); 

AuthService.authUser('[email protected]', 'abc123') 
    .then(function(data) { 
    expect(data.success).toBeTruthy(); 
}); 

$httpBackend.flush(); 
}); 
Смежные вопросы