Protractor: Admite agregar módulos simulados a aplicaciones Angular 2

Creado en 6 abr. 2016  ·  31Comentarios  ·  Fuente: angular/protractor

Actualmente no es posible agregar módulos simulados para aplicaciones Angular 2.

Este número refleja las TODO publicadas aquí .

Y, para hacer una referencia cruzada de la publicación SO relevante: http://stackoverflow.com/questions/36354233/protractor-mocking-backend-with-angular2-on-api-request.

Gracias.

user experience feature request

Comentario más útil

@ jlin412 sí, eventualmente, pero requerirá una investigación y un pensamiento cuidadoso sobre cómo funciona tanto en aot como en no aot. Si usa híbrido, seguirá funcionando para los bits ng1.

Todos los demás: usen la respuesta de emoji de github a los problemas de +1. Agregar comentarios hace que sea difícil analizar el progreso real. Eliminaré estos comentarios para que esto sea legible. ¡Gracias!

Todos 31 comentarios

@juliemr , ¿planeamos admitir simulacros para angular 2? ¿Si sí, cuándo? Si usamos el modo híbrido, ¿el simulacro seguirá funcionando mientras tanto?

@ jlin412 sí, eventualmente, pero requerirá una investigación y un pensamiento cuidadoso sobre cómo funciona tanto en aot como en no aot. Si usa híbrido, seguirá funcionando para los bits ng1.

Todos los demás: usen la respuesta de emoji de github a los problemas de +1. Agregar comentarios hace que sea difícil analizar el progreso real. Eliminaré estos comentarios para que esto sea legible. ¡Gracias!

@juliemr ¿Tenemos una ETA en implementación simulada para angular 2?
Además, ¿hay alguna alternativa que podamos usar mientras tanto?

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

Lo mismo ocurre con los paquetes http-backend-proxy y httpbackend.

Por lo tanto, creé un entorno de prueba E2E usando docker-compose, pero creo que es una implementación exagerada.

¿Actualmente tiene mejores prácticas?

Me encontré con el mismo problema por burlarme de mis llamadas backend. Como usamos el middleware de conexión para ejecutar nuestra aplicación, creé un complemento que le permite simular su solicitud http angular 1 y 2.

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

tal vez puedas usarlo.

No estoy seguro del mecanismo por el cual hacer esto, pero creo que el enfoque ingenuo para instalar módulos simulados sería el siguiente:

Transportador de alguna manera anularía estos dos métodos:

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

En su lugar, habría un contenedor simple que construye un nuevo ngModule y proporciona los módulos que queremos simular (a continuación se muestra un pseudocódigo de cómo se vería):

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

  platformBrowserDynamic().bootstrapModule(moduleToBoostrapWrapper);
}

¿Alguna idea de si hay un lanzamiento planificado para esta característica?

+1 para esta función. ¡Necesitamos simulacros en las pruebas e2e en aplicaciones Angular 2+!

Angular 2+ está creciendo, por lo que esta función se está volviendo bastante urgente :)

Sí, es absolutamente crucial para nuestro flujo de trabajo en este momento.

Ya estamos en angular5 y aún no podemos simular http en las especificaciones e2e 😕

( @tauil pequeño mundo, ¿eh?)

Estos son los usos comunes para los que necesito addMockModule.

1) inyección de interceptores personalizados.
https://angular.io/guide/http#write-an-interceptor
ejemplo, captura la actividad http y escribe en el disco usando un transportador si la prueba falla.

2) anular la funcionalidad en los servicios normalmente para burlarse de los servicios de datos de terceros.

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

Para servicios personalizados: podríamos seguir el enfoque de plantilla httpclient. Implementar (1) potencialmente resolvería esto también.

3) para acceder a objetos internos de páginas individuales (aunque no kosher)
ng.probe($0)._debugInfo
transportador ejecutarScript

¿Cuándo se implementará?

Realmente podría hacer con esto!

Esta es una característica imprescindible, ¿cómo puede tener dos años?

Como solución alternativa, puede usar jswiremock para desconectar las llamadas de back-end. He escrito algunas instrucciones aquí: https://gist.github.com/jamescookie/f7b854226ca1e133d1b7b2798095b7f4

Otra alternativa es el nock .
Es una biblioteca universal para burlarse de las solicitudes HTTP, que no depende de ningún marco.

Puede usar ng-apimock que ya está presente en el sitio del transportador. Hay una gran publicación de blog sobre esto aquí

Puedes usarlo para aplicaciones AngularJs y Angular

Esta característica es tan crucial que creo que debería ser parte del transportador principal, incluso si ng-apimock se incluyera en las bibliotecas principales del transportador.

Intento dar el visto bueno tanto como puedo, ¿cuál es el progreso en esta característica? Es un gran bloqueador en este momento.

En serio, ¿se acaba de abandonar el transportador por Angular?

Entonces, esto es parcialmente factible sin ningún cambio en el transportador o angular hoy. Puede crear una configuración "simulada" para ng serve que ofrecerá un conjunto diferente de módulos. Esto debería permitirle realizar pruebas de back-end sin necesidad de servidores dependientes en funcionamiento y evitar la necesidad de tener que implementar la simulación en la capa HTTP. He creado un repositorio de ejemplo que demuestra esto aquí: https://github.com/westonpace/angular-example-mock-services

También describo los pasos requeridos en mi respuesta a una pregunta SO aquí: https://stackoverflow.com/questions/39942118/how-to-inject- different -service-based-on-certain-build-environment-in-angular2

No es tan fácil/personalizable como lo era en Angular 1 (por ejemplo, no puede agregar diferentes servicios simulados para diferentes pruebas), pero una vez que el andamiaje esté en funcionamiento, agregar y eliminar servicios simulados debería ser bastante sencillo.

¿Hay alguna actualización sobre esto? @ jlin412 dijiste que requerirá investigación y pensamiento cuidadoso. ¿Has comenzado con esto?

¿Hay alguna actualización sobre esto? @ jlin412 dijiste que requerirá investigación y pensamiento cuidadoso. ¿Has comenzado con esto?

@katiesandford , creo que el enfoque detallado aquí se adaptará a la mayoría de las situaciones de prueba en esta configuración. Si no es así, me encantaría saber cuáles son esos valores atípicos para poder pensar en ellos para situaciones futuras.

@gabrieldoty Con este enfoque, puede simular a nivel de servicio pero no a nivel de http si entiendo bien.
Además, en un enfoque de desarrollo basado en el comportamiento, desea que sus simulacros sean dinámicos. Diferentes pasos de prueba configurarían diferentes simulacros. Esto parece difícil de lograr con esta configuración.

¡Grandes puntos de @gaeljw ! Puedo ver algunas formas bastante torpes de manejar los simulacros dinámicos, ¡pero sin duda sería preferible una solución dinámica!

Mi aplicación solo usa una sola clase de servicio de datos para manejar todas las solicitudes HTTP, por lo que es bastante fácil cambiar ese servicio. Pero eso no es tan universal como un verdadero simulacro de http.

¡Gracias por esos pensamientos!

¿Alguna noticia sobre esto? Parece que el desarrollo de Protractor ya no está tan activo...

¿alguna actualización?

Los módulos de simulación ayudarían a moverse alrededor de # 4300

¡Guau, este boleto ya tiene casi 4 años! ¿Hay alguna actualización?

¿Hay noticias?

¿Fue útil esta página
0 / 5 - 0 calificaciones