Karmas testes com AngularJS &# 43; RequireJS

Publicado Wed, 11 de fevereiro de 2015 por Monica

Configurando o teste é geralmente um pouco doloroso -, mas a criação de testes quando você está usando algum tipo de Angular + Exigir configuração estranho é ainda pior! Além disso, a documentação Karma é um pouco concisa, por isso é difícil dizer exatamente qual combinação de definições de configuração, poderá ir o resultado esperado. Aqui está como eu conseguido isso.

Aqui está, uma hierarquia típica amostra. Meu diretório de nível superior é algo como / opt / algum aplicativo. No entanto, uma vez que todas as configurações irão usar caminhos relativos, isso não é realmente importante. Tudo que você precisa saber é que o meu projeto raiz contém “app9rdquo; como um subdirectório.

Como você provavelmente pode deduzir, para este post vou discutir como vamos testar um filtro, que é usado em nosso aplicativo. Em seguida, vamos olhar para os arquivos-chave em jogo aqui:

  • my_filter.js O filtro queremos testar.
  • my_filter_spec.js O arquivo com os nossos testes nele.
  • app.js Nosso módulo angular.
  • karma.conf.js arquivo de configuração, o que dizer ao servidor karma quais arquivos para assistir e servir.
  • main.js vs. teste-main.js Main.js é a configuração RequireJS verdadeira do nosso aplicativo, que deseja espelhar, tanto quanto possível no teste-main.js, de modo que todos os nossos definem declarações que trabalham em nosso aplicativo também trabalham em nossos testes.

Configurando módulos angular com Exigir

Em geral, a única coisa a lembrar é que se você quiser testar alguma coisa, cada módulo AMD deve retornar a função que pretende testar, para que possamos inseri-lo mais tarde. Vou assumir que você já tem algum tipo de trabalho Angular + Exigir configuração que você deseja testar, e vai encobrir os detalhes de bootstrapping seu módulo angular do núcleo. Aqui é apenas um pequeno exemplo de um “requireable9rdquo; módulo angular e um filtro.

1. Reveja as main.js para sua configuração Exigir Eu estou indo supor que você está familiarizado com Exigir, e só discutir as partes da configuração RequireJS que precisamos fazer o teste para o trabalho.

Então você vê, estamos dizendo Exigir que começar a olhar em scripts / automaticamente, assim desta forma, quando definimos um novo módulo, Exigir começará a resolver para onde olhar para um arquivo para incluir como uma dependência usando este baseUrl.

2. Definir um módulo Isso nos permite definir os componentes em um módulo em tempo de execução. Uma vez que criamos este módulo, nós vamos ser capazes de incluí-lo em qualquer lugar usando define ([ 'app'], function () < . >) Porque main.js sabe que “app9rdquo; realmente significa “scripts / app.js9rdquo ;.

3. Criar um filtro, registrá-lo no módulo

Ok, então agora você tem os três principais “normal9rdquo; componentes necessários para este exemplo:

Agora vamos criar o “testing9rdquo; homólogos:

... e, claro, a configuração Karma em si.

Agora é um bom momento para instalar Karma e seus componentes variáveis ​​se você não tiver já.

Agora você pode navegar para app / test / e execute:

Quando um dos prompts pergunta se você estiver usando RequireJS, diga SIM. Isso irá gerar as bases dos nossos dois arquivos de configuração importantes: karma.conf.js e teste-main.js. Naturalmente, eles não irá funcionar fora da caixa, mas nós vamos chegar lá.

Comece abrindo karma.conf.js. Este arquivo tem um monte de configurações interessantes, que iremos discutir, por sua vez. Primeiro, vou mostrar-lhe a configuração de trabalho para o nosso projeto de exemplo:

Mais importante, nós nos preocupamos basePath. Queremos que este seja o caminho do nosso projeto, para que Karma pode encontrar nossos arquivos angulares, arquivos de fornecedores e arquivos de teste, e servi-los para exigir. Este é o ponto crítico. Somente os arquivos que são servidos por Karma pode ser encontrada durante o teste, quando Exigir está tentando reunir suas dependências. É por isso que, por exemplo, temos a seguinte linha em arquivos:

Porque sem isso, quando nós, configuração de teste-main.js, teremos 404 WARN de ao tentar carregar Angular. Como regra geral, qualquer arquivo que você deseja testar, ou que é uma dependência de um arquivo que você deseja testar, deve ser captado por Karma, combinando uma entrada no “files9rdquo ;.

I aumentou o logLevel por isso vamos obter uma saída mais detalhada durante a depuração, e virou autoWatch a verdade, de modo que quaisquer alterações ao teste-main.js são apanhados. Se você fizer alterações karma.conf.js, você terá que matar Karma e começar o processo novamente para ele considerar estas mudanças.

Tempo para o primeiro teste! Tente executar karma com o seu arquivo de configuração. Ele deve cuspir uma longa lista Biiiiig de todos os arquivos que você já contou a servir (especialmente por causa da configuração config.LOG_DEBUG).

Você deve obter uma saída que diz que ele carregado o arquivo de configuração. Se você receber um erro que não poderia encontrar o arquivo de configuração, certifique-se o caminho do arquivo depois de “start karma” está correto. Estou executando isso do meu diretório de nível superior (/ opt / some-app).

Agora você pode abrir o seu navegador em http: // localhost: 9876. Se o seu comando karma início ainda está em execução, você deve ver uma bandeira verde alegre no topo da tela.

Pense-teste main.js como uma forma de substituir main.js para fins de teste. Desta forma, todos os seus arquivos manter a mesma definir instruções, mas eles são realmente “olhar em outro lugar” com a finalidade de teste.

Primeiras coisas primeiro: A configuração padrão karma + RequireJS está errado. Em particular, a forma como ele decide como os arquivos que estão sendo passados ​​para deps deve ser formatado. Você vai ver uma função chamada fileToModule. DELETE ISSO. Este tenta truncar a extensão .js de seus arquivos de teste, o que nós realmente não quer que ele faça, porque Karma realmente fazer uma solicitação HTTP para my_filter_spec vez de my_filter_spec.js. Tente isto em vez de recolher os arquivos de teste:

A próxima parte importante desse arquivo é baseUrl. Este é o irmão perdido longo, longo loooong de basePath em karma.conf.js - é difícil imaginar quando você está olhando para eles, mas eles estão trabalhando juntos de alguma maneira misteriosa.

Para nós, o seguinte emparelhamento funciona:

Isso ocorre porque karma está servindo nosso diretório de nível superior inteiro no / base. Então, para espelhar nossos main.js Normal, que tem baseUrl: '/ scripts', em test-main.js colocamos '/ base / app / scripts'. Assim, em ambos os nossos configurações para Require.js, necessita é utilizar nosso “scripts / 9rdquo; pasta como um ponto de partida.

Seguindo esta lógica, nós podemos re-definir onde queremos que os nossos caminhos em test-principal de vir de:

Agora, isso significa, quando temos um arquivo com o seguinte cabeçalho:

Quando ele é carregado usando main.js, “caminho / a / somewhere9rdquo; irá carregar http: // localhost: 8080 / scripts / path / to / em algum lugar do seu servidor web normal. Ao usar o teste-main.js, o mesmo arquivo exigirá http: // localhost: 9876 / base / app / scripts / path / to / em algum lugar do carma. Ou seja, o código pode ser usado para executar o aplicativo ou para testes, sem modificações dos caminhos de dependência em arquivos individuais!

Agora nós finalmente começar a tentar juntar tudo com o nosso primeiro arquivo spec. Comece por instalar angulares-simulações, pois isso irá permitir-nos de registar o nosso filtro antes de testá-lo.

Adicione isto a sua arquivo de teste-main.js em “paths9rdquo ;:

Uma vez que incluem angularMocks como uma dependência, teremos angular.mock disponível em nosso instância angular. Podemos usar isso para construir componentes em tempo real à medida que testar.

Agora é hora de karma começar nossos testes !! Você deverá ver uma mensagem muito emocionante:

Uma vez que isso funciona, você pode ir em frente e escrever um teste real:

Claramente, esta é apenas a ponta do iceberg, e há muito mais trabalho a ser feito para ter uma base de código bem testado com uma combinação de Angular e exigem. Aqui estão alguns recursos adicionais sobre como trabalhar com o teste de unidade em uma + Angular Exigir ambiente:


Guild Wars 2 exótico karma fornecedor tático deathstrider

Baixar, ouvir e vista livre Guild Wars 2 Exotic Karma Vendor Tactician Deathstrider MP3, Vídeo e Letra

Baixar, ouvir e vista livre Guild Wars 2 Exotic Karma Vendor Tactician Deathstrider MP3, Vídeo e Letra

Baixe, Ouça e vista livre ★ Guild Wars 2 ★ - L80 Karma Fornecedores MP3, Vídeo e Letra

Baixar, ouvir e vista livre Guild Wars 2 - Templo de Balthazar Karma Vendor - Então MP3 Expensive, Vídeo e Letra

Baixar, ouvir e vista livre Guild Wars 2 Exotic Karma Vendor Lightbringer Surefoot MP3, Vídeo e Letra

Baixar, ouvir e vista livre Guild Wars 2 Exotic Historiador Karma Vendor Vermoth MP3, Vídeo e Letra

Baixe, Ouça e Ver Aliança livre Wars 2 | Templo de Lyssa Karma Armaduras MP3, Vídeo e Letra

Baixar, ouvir e vista livre Guild Wars 2 - Abertura 1000 - Perdido Caixas Orrian Jóias mp3, vídeo e letras

Baixe, Ouça e vista livre GW2 TA UU exp caminho prazo MP3, Vídeo e Letra

Baixe, Ouça e Ver Aliança livre Wars2 Exotic Armadura Karma Vendor Keeper Jonez Deadrun MP3, Vídeo e Letra

Baixar, ouvir e vista livre Guild Wars 2 Exotic Karma armadura Vendor Crusader Benson / Warmaster Benson MP3, Vídeo e Letra

Baixe, Ouça e vista livre GW2 - Karma, Karma Merchants, e usando o Trading Post. MP3, vídeo e Letras

Baixe, Ouça e vista livre Karma Vendor MP3, Vídeo e Letra

Baixar, ouvir e vista livre Guild Wars 2 pirata enigma Fast Track & Karma engrenagem do pirata MP3, Vídeo e Letra

Baixe, Ouça e Ver Aliança livre Wars 2 | Karma impulsionar truque !! MP3, vídeo e Letras

Baixe, Ouça e vista livre Sharkmaw Caverns Karma Vendor MP3, Vídeo e Letra

Baixar, ouvir e vista livre Guild Wars 2 Crepúsculo Arbor FF exp caminho run.wmv MP3, Vídeo e Letra

Baixar, ouvir e vista livre Guild Wars 2 - Abertura 1000 - Perdidos Caixas Orrian Jóias Google Sheets MP3, Vídeo e Letra

Baixar, ouvir e Vista Guild Wars gratuitos 2 - Como obter o Warrior / Guardião "conserto" Armor Set MP3, Vídeo e Letra

Baixar, ouvir e vista livre Guild Wars 2 - Set Armageddon PvP MP3, Vídeo e Letra

Baixar, ouvir e visualizar livre [GW2 - Engenheiro] "Nenhum lugar para esconder" Achievement (How-to em menos de 7s) MP3, Vídeo e Letra