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

Созданный на 6 апр. 2016  ·  31Комментарии  ·  Источник: angular/protractor

В настоящее время невозможно добавить фиктивные модули для приложений Angular 2.

Эта проблема отражает опубликованное здесь TODO.

И, чтобы сослаться на соответствующий пост SO: http://stackoverflow.com/questions/36354233/protractor-mocking-backend-with-angular2-on-api-request.

Спасибо.

user experience feature request

Самый полезный комментарий

@ jlin412 да, в конце концов, но это потребует изучения и тщательного обдумывания того, как это работает как в aot, так и в не-aot. Если вы используете гибрид, он будет продолжать работать для битов ng1.

Все остальные - пожалуйста, используйте ответ смайликов github на вопросы +1. Добавление комментариев затрудняет анализ реального прогресса. Я буду удалять эти комментарии, чтобы это было читабельно. Спасибо!

Все 31 Комментарий

@juliemr мы планируем поддерживать mock для angular 2? Если да, то когда? Если мы будем использовать гибридный режим, будет ли mock продолжать работать?

@ jlin412 да, в конце концов, но это потребует изучения и тщательного обдумывания того, как это работает как в aot, так и в не-aot. Если вы используете гибрид, он будет продолжать работать для битов ng1.

Все остальные - пожалуйста, используйте ответ смайликов github на вопросы +1. Добавление комментариев затрудняет анализ реального прогресса. Я буду удалять эти комментарии, чтобы это было читабельно. Спасибо!

@juliemr У нас есть ETA для макетной реализации для angular 2?
Кроме того, есть ли альтернатива, которую мы можем использовать тем временем?

ОТ: http://stackoverflow.com/questions/36354233/protractor-mocking-backend-with-angular2-on-api-request.

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

Поэтому я создал тестовую среду E2E с помощью docker-compose, но мне кажется, что это преувеличенная реализация.

Есть ли у вас в настоящее время лучшие практики?

Я столкнулся с той же проблемой из-за издевательства над моими внутренними вызовами. Поскольку мы используем промежуточное ПО для запуска нашего приложения, я создал плагин, который позволяет вам имитировать ваш http-запрос angular 1 и 2.

https://mdasberg.github.io/ng-apimock/

может быть, вы можете использовать его.

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

Транспортир каким-то образом переопределит оба этих метода:

  • platformBrowserDynamic().bootstrapModule
  • platformBrowser().bootstrapModuleFactory

На их месте будет простая оболочка, которая создает новый ngModule и предоставляет модули, которые мы хотим смоделировать (ниже приведен псевдокод того, как это будет выглядеть):

function bootstrapModuleOverride (moduleToBootstrap) {
  @NgModule({
    imports: [moduleToBootstrap],
    provide: ArrayOfMockModules,
    bootstrap: moduleToBootstrap.bootstrap
  })
  class moduleToBoostrapWrapper {}

  platformBrowserDynamic().bootstrapModule(moduleToBoostrapWrapper);
}

Есть идеи, планируется ли выпуск этой функции?

+1 за эту функцию. Нужны моки в тестах e2e в приложениях Angular 2+!

Angular 2+ растет, поэтому эта функция становится очень актуальной :)

Да, это абсолютно необходимо для нашего рабочего процесса на данный момент.

Мы уже на angular5 и до сих пор не можем имитировать http в спецификациях e2e 😕

( @tauil маленький мир, а?)

Вот распространенные варианты использования, в которых мне нужен addMockModule для .

1) внедрение пользовательских перехватчиков.
https://angular.io/guide/http#writing -перехватчик
пример захвата http-активности и записи на диск с помощью транспортира, если тест не пройден.

2) переопределить функциональность в службах, как правило, для имитации сторонних служб данных.

      .decorator(
          'xyzService',
          [
            '$q', '$delegate',
            ($q, $delegate) => {
              $delegate.isEnabled = () => true;
              return $delegate;
            }
            $delegate.getProfileDetail = () =>
                  $q.when({name: 'Tester 001', title: 'E2E Tester'});
          ])

Для пользовательских сервисов: мы могли бы следовать подходу шаблона httpclient. Реализация (1) также может решить эту проблему.

3) для доступа к внутренностям отдельных объектов страницы (хотя и не кошерно)
нг.зонд($0)._debugInfo
транспортир

Когда он будет реализован?

Мог бы действительно сделать с этим!

Это обязательная функция, как ей может быть два года?!

В качестве обходного пути вы можете использовать jswiremock для отключения внутренних вызовов. Я написал несколько инструкций здесь: https://gist.github.com/jamescookie/f7b854226ca1e133d1b7b2798095b7f4 .

Другой альтернативой является nock .
Это универсальная библиотека для имитации HTTP-запросов, не зависящая от какого-либо фреймворка.

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

Вы можете использовать его для приложений AngularJs и Angular.

Эта функция настолько важна, что я думаю, что она должна быть частью основного транспортира, даже если ng-apimock был только что включен в основные библиотеки транспортира.

Пытаюсь как можно больше ставить лайки, как продвигается работа над этой функцией? На данный момент это тяжелый блокировщик.

Серьезно, от транспортира только что отказались в пользу Angular?

Так что сегодня это частично выполнимо без каких-либо изменений в транспортире или угловом. Вы можете создать «фиктивную» конфигурацию для ng serve , которая будет обслуживать другой набор модулей. Это должно позволить вам выполнять внутреннее тестирование без необходимости запуска и запуска зависимых серверов и избежать необходимости реализовывать насмешки на уровне HTTP. Я создал пример репозитория, демонстрирующий это здесь: https://github.com/westonpace/angular-example-mock-services .

Я также описываю шаги, необходимые в моем ответе на вопрос SO , здесь:

Это не так просто / настраивается, как в Angular 1 (например, вы не можете добавлять разные фиктивные сервисы для разных тестов), но как только скаффолдинг запущен и работает, добавление и удаление фиктивных сервисов должно быть довольно простым.

Резюме быстрого - чистого - без библиотеки способа справиться с этим здесь:

https://stackoverflow.com/questions/36354233/protractor-mocking-backend-with-angular2-on-api-request/51834607#51834607

Есть ли какие-либо обновления по этому поводу? @ jlin412 вы сказали, что это потребует расследования и тщательного обдумывания - вы начали это?

Есть ли какие-либо обновления по этому поводу? @ jlin412 вы сказали, что это потребует расследования и тщательного обдумывания - вы начали это?

@katiesandford , я считаю, что описанный здесь подход подойдет для большинства ситуаций тестирования в этой настройке. Если это не так, я хотел бы знать, что это за выбросы, чтобы я мог подумать о них для будущих ситуаций.

@gabrieldoty При таком подходе вы можете издеваться на уровне обслуживания, но не на уровне http, если я хорошо понимаю.
Более того, в подходе к разработке, основанном на поведении, вы хотите, чтобы ваши макеты были динамичными. Различные этапы тестирования настраивают разные макеты. Это кажется труднодостижимым с этой настройкой.

@gaeljw отличные очки! Я вижу некоторые довольно неуклюжие способы обработки динамических макетов, но, несомненно, динамическое решение было бы предпочтительнее!

В моем приложении для обработки всех HTTP-запросов используется только один класс службы данных, поэтому заменить эту службу довольно легко. Но это далеко не так универсально, как настоящий http mock.

Спасибо за эти мысли!

есть новости об этом? Похоже, разработка Protractor уже не так активна...

любые обновления?

Мок-модули помогут обойти #4300

Вау, этому билету уже почти 4 года! Есть ли обновления?

Какие-нибудь Новости?

Была ли эта страница полезной?
0 / 5 - 0 рейтинги