Se o Protractor estiver substituindo o Angular Scenario Runner para o teste E2E, isso significa que ainda poderei usá-lo com o Karma como minha estrutura de teste E2E?
javascript
angularjs
testing
protractor
karma-runner
princípio holográfico
fonte
fonte
Respostas:
Não recomendado pelo atual mantenedor do Transferidor:
E
fonte
ATUALIZAR. Aqui está um pacote simples que criei para adicionar a configuração mínima do Karma a qualquer projeto com um único comando
npm install min-karma
.Eu gostaria de esclarecer alguns possíveis conceitos errôneos sobre Karma e Transferidor . Karma FAQ na verdade se refere ao Adaptador para o Scenario Runner do Angular , que, no entanto, parece ter sido abandonado, com o Protractor sendo recomendado em seu lugar.
Carma
Karma é um executor de teste que executará os arquivos JavaScript especificados em seu arquivo de configuração explicitamente ou usando node-globs . (Para modelos externos não JavaScript , o Guia de teste de unidade do Angular recomenda o uso do pré - processador Karma html para compilá-los primeiro em JavaScript.)
Eles podem ser todos os seus arquivos de origem, alguns deles, alguns deles mais alguns arquivos adicionais ou arquivos irrelevantes para o seu projeto, fornecendo apenas algumas configurações extras - você escolhe! Você pode ter vários arquivos de configuração do karma para diferentes propósitos, que podem ser executados em paralelo ou um por um. Cada processo do karma inicia seu próprio conjunto de navegadores (atualmente disponíveis) .
Este recurso do Karma para executar apenas um conjunto de arquivos é o que o torna perfeito para testes rápidos executados em segundo plano a cada edição do arquivo de origem e obter feedback imediato, o que é brilhante! O único aspecto negativo é o relatório de erro "barulhento" que, com sorte, irá melhorar!
Karma não é apenas para testes de unidade
O teste de unidade é para uma única unidade de seu código-fonte. No caso do Angular, uma unidade típica é o Componente Angular (
Service, Factory, Provider, Controller, Filter, Directive
etc). Lembre-se de manter seuControllers
magro, então muitos testes de unidade para os últimos é um sinal de alerta .Em um teste de unidade , todas as outras unidades de código das quais essa unidade depende (as chamadas dependências da unidade) não devem ser testadas ao mesmo tempo. Em vez disso, eles devem ser "ridicularizados", por exemplo, substituídos por algo simples como instâncias fictícias. O Angular oferece excelente suporte a ambientes simulados . O ideal é que você queira ver todos esses mocks diretamente dentro de seus testes, para que nunca precise se perguntar de onde vêm todas essas dependências.
Karma é igualmente útil para testes de integração , onde um grupo de unidades de código-fonte é testado em conjunto, com apenas algumas de suas dependências sendo simuladas. É importante lembrar que qualquer dependência é fornecida por padrão a partir de seus módulos de código-fonte (contanto que esses módulos sejam injetados diretamente em seus testes ou sejam dependências de outros módulos injetados (neste caso, você não precisa injetá-los , mas não há problema em fazê-lo). As dependências simuladas substituirão as fornecidas.
Correr rápido e frequente é a principal característica do Karma . Isso significa que você deseja evitar quaisquer solicitações do servidor, consultas ao banco de dados, qualquer coisa que possa levar mais do que frações de segundos. ( Caso contrário, NÃO será rápido! ) Esses processos longos são aqueles dos quais você deseja zombar . Isso também explica por que é uma má prática colocar serviços de baixo nível brutos, como
$http
diretamente dentro de seus controladores ou qualquer unidade lógica de negócios complicada. Ao agrupar esses serviços de comunicação externa de baixo nível em serviços dedicados menores, você torna muito mais fácil "zombar deles".O que o Karma não faz é administrar o seu site como ele está, que é o teste End-to-End (E2E). Em princípio, você pode usar os métodos internos do Angular para recriar o site ou suas partes. O que, para peças pequenas, pode ser útil e uma maneira rápida, por exemplo, para testar diretivas.
No entanto, não é uma maneira recomendada de lançar códigos complicados em seus testes. Quanto mais você faz isso, maior a chance de cometer erros no código em vez do que está realmente testando.
É por isso que eu pessoalmente não gosto da maneira complicada mencionada freqüentemente de métodos de teste usando métodos de baixo nível como
$http
. Ele funciona de forma mais limpa para isolar qualquer referência a métodos de baixo nível em métodos dedicados de sua autoria, cuja única responsabilidade é fazer solicitações http. Esses métodos dedicados devem ser capazes de funcionar com back-end real , não falso! Que você pode testar facilmente - manualmente ou mesmo perfeitamente bem com Karma rodando com outra configuração especial , contanto que você não misture essa configuração com aquela normalmente usada para rodar Karmaregular e rápido. Agora, tendo seus pequenos serviços dedicados testados, você pode simular com segurança e facilidade para testar sua outra lógica e colocar esses testes em sua configuração normal do Karma .Para resumir. Use Karma para executar qualquer conjunto de arquivos JavaScript. É (deveria ser) rápido. Você não vê seu aplicativo completo, então não pode testar o resultado final de forma eficaz e confiável. Eu iria executá-lo com o Transferidor ? Por que eu deveria? Executar o Transferidor tornaria meus testes mais lentos, anulando o propósito do Karma . É fácil executar o Transferidor separadamente.
Transferidor
Transferidor é:
Portanto, o Protractor faz exatamente o que o Karma não faz - executa seu aplicativo final real. Isso revela seu poder e limitações:
A execução do aplicativo completo é o único teste final confiável em que seu aplicativo funciona conforme o esperado. Você pode escrever cenários completos de histórias de usuário e colocá-los em seus testes!
Mas é mais difícil rastrear erros sem isolar unidades individuais de seu código-fonte. É por isso que você ainda precisa do Karma para testar seu código JavaScript primeiro.
Agora, eu gostaria de executar o Transferidor com Karma ? Certamente posso executá-los em janelas de terminal separadas, em paralelo. Eu poderia, em princípio, fazer com que eles compartilhassem arquivos de teste se eu precisar, mas normalmente prefiro não. Por quê? Porque eu quero manter meus testes pequenos com um único propósito dedicado.
A única exceção seria um arquivo que define macros de teste úteis para ambos os corredores. Este, entretanto, não seria um arquivo de teste, mas um arquivo de definição de macro .
Fora isso, gosto de uma separação clara entre meus testes. Aqueles para serem executados com frequência e rapidez, e aqueles para o aplicativo completo. Isso faz uma separação clara entre quando usar Karma e quando transferidor .
fonte
Karma é um executor de testes fornecido pela equipe Angular, Karma executará seus testes em vários navegadores, o que garantirá que nosso aplicativo seja compatível em todos os navegadores. O teste de unidade para js angular pode ser usado karma + jasmim
Jasmine é uma estrutura de teste de unidade javascript e nos fornecerá utilitários para testar nosso aplicativo. Isso funciona melhor na estrutura Angular e, portanto, nossa escolha de “ferramenta de teste de unidade automatizada”. https://github.com/shahing/testingangularjs
E o Protractor é uma estrutura de teste ponta a ponta para aplicativos Angular e AngularJS. O Protractor executa testes em seu aplicativo rodando em um navegador real, navegadores sem interface, testes de navegador cruzado e pode ser hospedado em saucelabs.
https://github.com/shahing/Protractor-Web-Automation
fonte
Sim, você pode usar carma e transferidor juntos. Karma é usado para testar a unidade do componente que você criou usando o comando angular, você pode testar esses componentes usando karma. Transferidor é usado para teste de ponta a ponta. É usado principalmente para testes de IU.
fonte