Подтвердить что ты не робот

Транспортир, насмешливый сервер с angular2 по запросу api

Я мог бы использовать некоторую помощь, чтобы найти решение для моей проблемы. Мне нужно высмеять некоторые данные в моем приложении angular2, когда он делает запрос на api, мне нужно сделать что-то вроде:

$httpBackend.when('GET', '/userbookings/').respond(my json file data);

Проблема в том, что все, что я могу найти в google, используя $httpBackend, который используется для angularJS (angular 1).

Кто-нибудь знает, как я могу заставить это работать в моем тесте E2E (приложение является приложением angular2)? Я пытаюсь сделать это как с помощью транспортира, так и с ночного видения (попробовали оба фреймворка)

Спектральный тест:

describe('Protractor Mocking bookings for angular2 site', function() {

var ngMockE2E = require('ng-mock-e2e');

var $httpBackend = ngMockE2E.$httpBackend;

beforeEach(function() {
    ngMockE2E.addMockModule();
    ngMockE2E.addAsDependencyForModule('myApp');
    ngMockE2E.embedScript('/bower_components/angular-mocks/angular-mocks.js');
});


afterEach(function() {
    ngMockE2E.clearMockModules();
});

it('Inject mock data of bookings', function() {

    var EC = protractor.ExpectedConditions;
    var global = require('../bin/globals.js');

    // Bookings data in a json file which should be send as the response
    var mockData = require('../testData.json');

    browser.ignoreSynchronization = false;

    $httpBackend.when('GET', '/userbookings').respond(mockData);

    browser.get(global.so.enLoggedIn);

});

});

Этот тест не работает, потому что он использует некоторый угловой метод. Вы показали это, так что вы можете увидеть, как выглядит мой тест.

Надеюсь, кто-то может помочь мне здесь, потому что очень трудно найти работу с angular2.

4b9b3361

Ответ 1

Protractor пока не поддерживает добавление модулей для Angular 2 приложений:

// TODO: support mock modules in Angular2. For now, error if someone
// has tried to use one.
if (self.mockModules_.length > 1) {
  deferred.reject('Trying to load mock modules on an Angular2 app ' +
      'is not yet supported.');
}

И я также создал проблему github для TODO, чтобы привлечь внимание:

Это, кстати, также означает, что protractor-http-mock не будет работать, поскольку он полагается на addMockModule внутри. Я лично пробовал protractor-http-mock в примере приложения Angular2, получил:

Не удалось: попытка загрузки модулей mock в приложение Angular2 пока не поддерживается.

То же самое верно для http-backend-proxy и httpbackend.


Я думаю, что пока проблема еще не исправлена, вы должны подумать о том, чтобы запустить прокси-сервер, который будет действовать как своего рода "внешний макет" для вашего бэкэнда API, не сделал этого лично, подробнее см.:

Ответ 2

Закончено с помощью json-server, поскольку поддержка addMockModule для Angular 2

Ответ 3

Поскольку нет поддержки для издевающихся модулей в angular 2, я сделал небольшой плагин транспортира, который позволяет выполнить mock ajax-запрос. Вы можете найти его здесь: https://github.com/krisboit/protractor-xmlhttprequest-mock

Пока нет документации, но вы можете найти образцы тестов. Надеюсь, это поможет вам.

Ответ 4

Лично я использовал плагин ng-apimock, чтобы издеваться над всеми сетевыми вызовами на бэкэнд с прокси-сервером.

Он работает очень хорошо и прост в настройке. Просто выполните конфигурацию для Angular приложения здесь