Как протестировать $http без насмешек с помощью jasmine и angular-mocks?

Я хочу провести интеграционный тест с реальными обращениями к моему серверу, поэтому я не хочу использовать модуль $httpBackend из angular-mocks, поэтому я пробую следующее:

beforeEach(inject(function($rootScope,_MembersDataSvc_){
    service = _MembersDataSvc_;
}));

it('test',function(done){
    service.me().then(function(){done();});
});

А сервис такой:

function me() {
      return $http
        .get('urlBase/me')
        .then(meSuccess);

        function meSuccess(response) {
            return response.data.members[0];
        }
    }

Это никогда не вызывает $ http, кажется, что angular-mocks переопределяет службу $ http и никогда не делал вызов.

Некоторые идеи?

ИЗМЕНИТЬ 1:

Согласно этому сообщению: http://base2.io/2013/10/29/conditionally-mock-http-backend/

вы можете сделать passThrough для этих вызовов $http, которые вы не хотите издеваться, поэтому попробуйте следующее:

var service;
    var scope;
    var $httpBackend;

    beforeEach(inject(function($rootScope,_MembersDataSvc_,_$httpBackend_){
        service = _MembersDataSvc_;
        scope = $rootScope.$new();
        $httpBackend = _$httpBackend_;
    }));

it('test',function(done){
        //this.timeout(10000);
        $httpBackend.whenGET(/views\/\w+.*/).passThrough();
        $httpBackend.whenGET(/^\w+.*/).passThrough();
        $httpBackend.whenPOST(/^\w+.*/).passThrough();
        service.me().then(function(response){console.log(response);done();});
        scope.$apply();
        //service.getDevices(member).then(function(response){console.log(response);done();})
    });

Но passThrough здесь не определен.

РЕДАКТИРОВАТЬ 2:

Я прочитал этот пост: http://blog.xebia.com/2014/03/08/angularjs-e2e-testing-using-ngmocke2e/, но я полагаю, что это отдельный тест ??, я хочу запустить его с кармой и жасмином.

Это весь мой тест.

describe('integration test', function () {

    beforeEach(function () {
        module('MyAngularApp');
    });

    var service;
    var scope;
    var $httpBackend;

    beforeEach(inject(function($rootScope,_MembersDataSvc_,_$httpBackend_){
        service = _MembersDataSvc_;
        scope = $rootScope.$new();
        $httpBackend = _$httpBackend_;
    }));

    it('test for test',function(done){
        $httpBackend.whenGET(/views\/\w+.*/).passThrough();
        $httpBackend.whenGET(/^\w+.*/).passThrough();
        $httpBackend.whenPOST(/^\w+.*/).passThrough();
        service.me().then(function(response){console.log(response);done();});
        scope.$apply();
    });
});

person cmarrero01    schedule 11.05.2015    source источник
comment
Вам нужно использовать части тестирования E2E docs.angularjs.org/api/ngMockE2E. Также ознакомьтесь с руководством по e2e docs.angularjs.org/guide/e2e-testing.   -  person Chandermani    schedule 12.05.2015
comment
@Chandermani дело в том, что E2E использует макеты для $http, я хочу, чтобы моя служба выполняла реальный вызов моего сервера, а не фиктивный.   -  person cmarrero01    schedule 13.05.2015
comment
Это неправда, вы можете совершать реальные звонки в сценарии E2E. Насмешка должна быть сделана явно   -  person Chandermani    schedule 13.05.2015
comment
@Changermani, у вас есть пример в соответствии с моим кодом выше? Я пытаюсь прокомментировать провайдера $httpBackend из angular-mocks, но это грязно.   -  person cmarrero01    schedule 13.05.2015
comment
См. этот пост http://www.base2.io/2013/10/29/conditionally-mock-http-backend/   -  person Chandermani    schedule 13.05.2015
comment
@Chandermani, я пытаюсь использовать passThrough, но он не определен, в этой строке: $httpBackend.whenGET(/^\w+.*/).passThrough(); TypeError: undefined не является функцией. И этот пост не имеет ничего общего с моим реальным вопросом, я не хочу издеваться над чем-либо, я хочу, чтобы мой тест выполнял настоящие вызовы http и прослушивал обратные вызовы каждого вызова $http.   -  person cmarrero01    schedule 13.05.2015
comment
Для использования $httpBackend из ngMockE2E необходимы критические изменения. Надеюсь, вы не включаете модуль ngMock во время тестирования E2E. Этот модуль переопределит службу $http по умолчанию. В тестах E2E работают стандартные http-вызовы.   -  person Chandermani    schedule 14.05.2015
comment
Сообщение, которое я дал, было неполным, извините за это, лучшее рассмотрение этой темы доступно здесь blog.xebia.com/2014/03/08/angularjs-e2e-testing-using-ngmocke2e.   -  person Chandermani    schedule 14.05.2015
comment
Я использую карму и жасмин для запуска теста, я отредактирую свой пост со всем тестовым кодом. Я не включаю имплицитность ngMock, но я полагаю, что она вводится по умолчанию.   -  person cmarrero01    schedule 14.05.2015
comment
Karma предназначена для модульного тестирования, а не для E2E-тестирования. Для тестирования E2E вам нужно использовать Protractor. Удаленный запрос не разрешен в модульном тесте.   -  person Chandermani    schedule 14.05.2015


Ответы (1)


Я рекомендую использовать ngMidwayTester, который позволяет подключаться к реальному бэкенду, я использую его для проведения интеграционных тестов на уровне кода — что-то среднее между модульным и e2e-тестированием:

Два типа тестов в AngularJS (плюс еще один) — тестирование полного спектра с AngularJS и Karma

person kulak    schedule 19.11.2015