E2E mock $ httpBackend na verdade não passa por mim

Embora eu acredite estar seguindo oinstruções aqui para configurar o $ httpBackend para passar solicitações selecionadas para o servidor, não está funcionando para mim.

Aqui está um Plunkr com um teste de falha Isso mostra o que estou fazendo e explica nos comentários o que parece estar errado.

Meu spelunking sugere que, por alguma razão, a zombaria$httpBackend não tem uma cópia interna do real$httpBackend para que, quando chegar a hora de passar pela solicitação XHR, passe para a simulação$httpBackend em vez de. Essa segunda chamada gera uma exceção porque não sabe o que fazer com a solicitação.

Resposta a dtabuenc

Lembro-me de apreciar seu post nos testes intermediários. Você identifica uma gama importante de testes de integração que se enquadra entre os testes de unidade e E2E. Eu estou de pé naquele meio termo.

Eu não acho que você esteja sendo irritante. Sua resposta é perfeitamente razoável ... ouseria razoável se não fosse contradito pelo texto do "Referência da API / ngMockE2E / $ httpBackend". Eu cito:

Essa implementação pode ser usada para responder com respostas estáticas ou dinâmicas por meio dowhen API e seus atalhos (whenGET, whenPOST, etc) eopcionalmente, passar por solicitações para o real$httpBackend para solicitações específicas (por exemplo, para interagir com determinadas APIs remotas ou buscar modelos de um servidor da web) ...

[I] em um cenário de teste de ponta a pontaou em um cenário em que um aplicativo está sendo desenvolvido com a API de back-end real substituída por uma simulação, muitas vezes é desejável que determinada categoria de solicitações ignore a simulação eemitir uma solicitação http real .... Para configurar o back-end com esse comportamento, use opassThrough manipulador de solicitações de quando em vez derespond[ênfase minha].

A documentação é silenciosa sobre o assunto do E2E$httpBackend uso em um ambiente Jasmine. Não consigo pensar em um motivo para impedi-lo. Se houver uma razão, eles devem declarar claramente. Sério, quem lê sobre umzombar componente e não prevê usá-lo em um ambiente de teste?

Para "passar por solicitações para o real$httpBackend para solicitações específicas, por exemplo para interagir com certas APIs remotas"é exatamente o que pretendo fazer. O que eles poderiam significar com" real $ httpBackend ", exceto a versão não simulada desse componente?

Eu não entendo sua afirmação de que

ongMocksE2E O módulo foi projetado para ser usado no lado "servidor" das coisas em que o aplicativo angular real está sendo executado.

A palavra "servidor" aparece exatamente três vezes nessa página, nem uma vez sugerindo quequalquer o código do aplicativo seria executado em um "servidor". Não sei o que você quer dizer com "aplicativo angular real" executando no "lado do servidor". "

A documentação é perfeitamente clara de que o E2E$httpBackend não está limitado ao teste E2E. É também para "um cenário em que um aplicativo está sendo desenvolvido com a API de back-end real substituída por uma simulação"

Isso está a meio passo do meu cenário em queum aplicativo está sendotestado com a API real de back-end. "

Nos meus cenários, o SUT está chamando um componente que busca dados de um servidor. Meus testes existem para verificar se esse componente dependente consegue fazer essas solicitações do back-end real e recupera ou salva os dados da maneira esperada. Este é um teste de integração que não pode ser adequadamente satisfeito ao ridicularizar o comportamento do back-end.

É claro que posso testar (e testá-lo) com respostas falsas de XHR a capacidade do componente de responder adequadamente ao queprever será o comportamento do back-end. Isso não é o mesmo que validar se o componente responde adequadamente aoreal comportamento do back-end ... que pode mudar à medida que o aplicativo evolui e se afasta das respostas simuladas de alguma maneira significativa.

Eu consideraria usar o seu testador intermediário para esse fim se eu entendesse como trocá-lo no caminho do código do SUT. Eu não. Eu acho que o componente que faz solicitações XHR é inacessível ao seungMidwayTester. Mas eu sei como prender um ajudante de XHR real no pipeline, se for necessário.

Aqui é onde eu estou no momento.

Alguém pode mostrar como fazer$httpBackend passar certas solicitações para o servidor - como a documentação proclama - ou substituirei opassThrough implementar-me com uma implementação XHR de trabalho.

Eu prefiro a primeira opção. Se for direcionado para o segundo, vou oferecer um link para ele aqui em benefício de outras pessoas que compartilham minhas necessidades e minha interpretação da documentação da API.

Existe uma terceira maneira que estou perdendo?

questionAnswers(4)

yourAnswerToTheQuestion