Protractor: Suporte para adicionar módulos simulados a aplicativos Angular 2

Criado em 6 abr. 2016  ·  31Comentários  ·  Fonte: angular/protractor

Atualmente não é possível adicionar módulos simulados para aplicativos Angular 2.

Este problema reflete o TODO publicado aqui .

E, para fazer referência cruzada à postagem SO relevante: http://stackoverflow.com/questions/36354233/protractor-mocking-backend-with-angular2-on-api-request.

Obrigada.

user experience feature request

Comentários muito úteis

@ jlin412 sim, eventualmente, mas exigirá investigação e pensamento cuidadoso sobre como funciona em aot e não aot. Se você usar híbrido, ele continuará funcionando para os bits ng1.

Todos os outros - por favor, use a resposta emoji do github para problemas com +1. Adicionar comentários dificulta a análise do progresso real. Eu estarei removendo esses comentários para que isso seja legível. Obrigado!

Todos 31 comentários

@juliemr estamos planejando dar suporte ao mock para angular 2? Se sim, quando? Se usarmos o modo híbrido, o mock continuará funcionando nesse meio tempo?

@ jlin412 sim, eventualmente, mas exigirá investigação e pensamento cuidadoso sobre como funciona em aot e não aot. Se você usar híbrido, ele continuará funcionando para os bits ng1.

Todos os outros - por favor, use a resposta emoji do github para problemas com +1. Adicionar comentários dificulta a análise do progresso real. Eu estarei removendo esses comentários para que isso seja legível. Obrigado!

@juliemr Temos um ETA na implementação simulada para o angular 2?
Além disso, existe alguma alternativa que possamos usar nesse meio tempo?

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

O mesmo vale para os pacotes http-backend-proxy e httpbackend.

Portanto, criei um ambiente de teste E2E usando docker-compose, mas sinto que é uma implementação exagerada.

Você tem atualmente as melhores práticas?

Eu me deparei com o mesmo problema para zombar de minhas chamadas de back-end. Como usamos o middleware de conexão para executar nosso aplicativo, criei um plug-in que permite simular sua solicitação http angular 1 e 2.

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

talvez você possa usá-lo.

Não tenho certeza do mecanismo pelo qual fazer isso, mas acho que a abordagem ingênua para instalar módulos simulados seria a seguinte:

O transferidor de alguma forma substituiria esses dois métodos:

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

Em seu lugar, seria um wrapper simples que constrói um novo ngModule e fornece os módulos que queremos simular (abaixo está o pseudocódigo de como seria):

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

  platformBrowserDynamic().bootstrapModule(moduleToBoostrapWrapper);
}

Alguma ideia se há um lançamento planejado para esse recurso?

+1 para este recurso. Precisamos de mocks nos testes e2e em aplicativos Angular 2+!

Angular 2+ está crescendo, então esse recurso está se tornando bastante urgente :)

Sim, é absolutamente crucial para o nosso fluxo de trabalho no momento.

Já estamos no angular5 e ainda não conseguimos simular http nas especificações do e2e 😕

( @tauil mundo pequeno, hein?)

Aqui estão os usos comuns que eu preciso de addMockModule para .

1) injetando interceptores personalizados.
https://angular.io/guide/http#writing -an-interceptor
exemplo, capturar a atividade http e gravar no disco usando o transferidor se o teste falhar.

2) substituir a funcionalidade em serviços normalmente para simular serviços de dados de terceiros.

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

Para serviços personalizados: poderíamos seguir a abordagem do modelo httpclient. Implementar (1) potencialmente resolveria isso também.

3) para acesso a objetos de página individuais internos (embora não kosher)
ng.probe($0)._debugInfo
transferidor executeScript

Quando será implementado?

Poderia realmente fazer com isso!

Este é um recurso obrigatório, como pode ter dois anos?!

Como solução alternativa, você pode usar jswiremock para eliminar as chamadas de back-end. Eu escrevi algumas instruções aqui: https://gist.github.com/jamescookie/f7b854226ca1e133d1b7b2798095b7f4

Outra alternativa é o nock .
É uma biblioteca universal para simular solicitações HTTP, não dependente de nenhuma estrutura.

Você pode usar o ng-apimock que já está presente no site do transferidor . Tem um ótimo post sobre isso aqui

Você pode usá-lo para aplicativos AngularJs e Angular

Esse recurso é crucial o suficiente para que eu ache que deve fazer parte do transferidor principal, mesmo que o ng-apimock tenha sido incluído nas bibliotecas principais do transferidor.

Tentando dar o polegar para cima o máximo que posso, qual é o progresso desse recurso? É um bloqueador pesado no momento.

Sério, o transferidor acabou de ser abandonado pelo Angular?

Portanto, isso é parcialmente possível sem alterações no transferidor ou angular hoje. Você pode criar uma configuração "simulada" para ng serve que servirá para um conjunto diferente de módulos. Isso deve permitir que você faça testes de back-end sem precisar de servidores dependentes em execução e evitar a necessidade de implementar a simulação na camada HTTP. Eu criei um repositório de exemplo demonstrando isso aqui: https://github.com/westonpace/angular-example-mock-services

Também descrevo as etapas necessárias na minha resposta a uma pergunta SO aqui: https://stackoverflow.com/questions/39942118/how-to-inject-different-service-based-on-certain-build-environment-in-angular2 /51772549#51772549

Não é tão fácil/personalizável como era no Angular 1 (por exemplo, você não pode adicionar diferentes serviços simulados para testes diferentes), mas uma vez que o scaffolding está funcionando, adicionar e remover serviços simulados deve ser bastante simples.

Resumo de uma maneira rápida - limpa - sem biblioteca de lidar com isso aqui:

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

Existe alguma atualização sobre isso? @jlin412 você disse que exigiria investigação e pensamento cuidadoso - você começou com isso?

Existe alguma atualização sobre isso? @jlin412 você disse que exigiria investigação e pensamento cuidadoso - você começou com isso?

@katiesandford , acredito que a abordagem detalhada aqui acomodará a maioria das situações de teste nesta configuração. Se isso não acontecer, eu adoraria saber quais são esses valores atípicos para que eu possa pensar sobre eles para situações futuras

@gabrieldoty Com essa abordagem, você pode simular no nível de serviço, mas não no nível http, se eu entender bem.
Além disso, em uma abordagem de desenvolvimento orientada por comportamento, você deseja que seus mocks sejam dinâmicos. Diferentes etapas de teste configurariam diferentes simulações. Isso parece difícil de conseguir com essa configuração.

@gaeljw ótimos pontos! Eu posso ver algumas maneiras bastante desajeitadas de lidar com os mocks dinâmicos, mas sem dúvida uma solução dinâmica seria preferível!

Meu aplicativo usa apenas uma única classe de serviço de dados para lidar com todas as solicitações HTTP, portanto, é bastante fácil trocar esse serviço. Mas isso não é tão universal quanto uma verdadeira simulação http.

Obrigado por esses pensamentos!

alguma noticia sobre isso? Parece que o desenvolvimento do Transferidor não é mais tão ativo...

alguma atualização?

Módulos de simulação ajudariam a contornar #4300

Uau, este bilhete tem quase 4 anos agora! Existem atualizações?

Qualquer notícia?

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

vishalshivnath picture vishalshivnath  ·  3Comentários

luakri picture luakri  ·  3Comentários

davidkarlsen picture davidkarlsen  ·  3Comentários

rafalf picture rafalf  ·  3Comentários

juliemr picture juliemr  ·  3Comentários