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.
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?