Карма-тестирование междоменного ресурса AngularJS
Я использую карму в качестве своей среды для выполнения теста проекта angular, у моего сервера angular есть доступ к другому веб-URL для получения таких данных, как http://localhost:8081/common/countries
получить всю информацию о стране. моя проблема в моей карме localhost:9876
и это нужно, чтобы получить данные из http://localhost:8081/common/countries
это вызывает междоменную проблему политикой просмотра того же источника. поэтому я получаю ошибку ниже в моей консоли:
Error: Unexpected request: GET http://localhost:8081/common/countries
No more request expected
at Error (<anonymous>)
at $httpBackend (http://localhost:9876/absoluteC:/WebUI/WebUI/test/lib/angular/angular-mocks.js:934:9)
at sendReq (http://localhost:9876/absoluteC:/WebUI/WebUI/vendor/angular/angular.js:9087:9)
at $http (http://localhost:9876/absoluteC:/WebUI/WebUI/vendor/angular/angular.js:8878:17)
at Object.getMock (http://localhost:9876/base/share/services.js:644:17)
at Object.get (http://localhost:9876/base/share/services.js:347:28)
at Object.getCountries (http://localhost:9876/base/share/services.js:221:22)
at Object.clSingleSelectConfig.nationality.getData (http://localhost:9876/base/share/directives.js:146:32)
at http://localhost:9876/base/share/directives.js:192:44
at nodeLinkFn (http://localhost:9876/absoluteC:/WebUI/WebUI/vendor/angular/angular.js:4360:13)
Что я пробовал:
1 установить плагин кармы карма-хром-лаунчер и добавить --disable-web-security
в моем конфигурационном файле. но это не работает 2 Установите "Access-Control-Allow-Origin" "Access-Control-Allow-Headers" "Access-Control-Allow-Methods" в заголовке, чтобы разрешить доступ к источнику в ответе сервера.
все вышеперечисленное не работает, так как решить мою проблему?
1 ответ
Для междоменных запросов используйте функцию waitJSONP и обязательно используйте параметр обратного вызова.
describe('stackru.activity tests', function () {
var svc, httpBackend;
beforeEach(function (){
module('ngResource');
module('stackru.activity');
inject(function($httpBackend, StackruActivityService) {
svc = StackruActivityService;
httpBackend = $httpBackend;
});
});
afterEach(function() {
httpBackend.verifyNoOutstandingExpectation();
httpBackend.verifyNoOutstandingRequest();
});
it('should send the message and return the response', function (){
var returnData = { testing: 'anything'};
httpBackend.expectJSONP('http://api.stackexchange.com/2.1/users/gigablox/timeline?callback=JSON_CALLBACK').respond(returnData);
svc.events({
user:'gigablox',
params:{
callback:'JSON_CALLBACK'
}
}).get(function(user) {
expect(user.testing).toEqual('anything');
});
httpBackend.flush();
});
});