Карма-тестирование междоменного ресурса 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();
    });
});

Источник для этого примера

Другие вопросы по тегам