javascript - with - unit test mocha chai nodejs




Ferramentas de teste de unidade JavaScript para TDD (9)

BusterJS

Há também Buster.js de Christian Johansen, autor de Test Driven Javascript Development e do framework Sinon. Do site:

O Buster.JS é um novo framework de teste JavaScript. Ele faz testes de navegador, automatizando execuções de teste em navegadores reais (pense em JsTestDriver), bem como testes em Node.js.

Analisei e considerei muitos testes de unidade JavaScript e ferramentas de teste, mas não consegui encontrar uma opção adequada para permanecer totalmente compatível com TDD. Então, existe uma ferramenta de teste de unidade JavaScript que é totalmente compatível com TDD?


Karma ou Protractor

O Karma é um executor de testes JavaScript construído com o Node.js e destinado ao teste de unidade.

O transferidor é para testes de ponta a ponta e usa o Selenium Web Driver para realizar testes.

Ambos foram feitos pela equipe Angular. Você pode usar qualquer biblioteca de asserções que quiser com qualquer uma delas.

Screencast: Karma Começando

relacionados :

pros :

  • Usa node.js, compatível com Win / OS X / Linux
  • Execute testes de um navegador ou sem cabeça com o PhantomJS
  • Executar em vários clientes de uma só vez
  • Opção para lançar, capturar e desligar automaticamente os navegadores
  • Opção para executar servidor / clientes no computador de desenvolvimento ou separadamente
  • Executar testes a partir de uma linha de comando (pode ser integrado em ant / maven)
  • Escrever testes xUnit ou estilo BDD
  • Suporta vários frameworks de teste JavaScript
  • Testes de execução automática salvos
  • Solicitações de proxies entre domínios
  • Possível personalizar:
    • Estenda-o para envolver outras estruturas de teste (Jasmine, Mocha, QUnit integrado)
    • Suas próprias afirmações / refuta
    • Repórteres
    • Lançadores de Navegadores
  • Plugin para WebStorm
  • Suportado pelo NetBeans IDE

Contras :

  • Não suporta testes NodeJS (ou seja, back-end)
  • Nenhum plugin para o Eclipse (ainda)
  • Não há histórico de resultados de testes anteriores

mocha.js

Estou totalmente desqualificado para comentar sobre os recursos, pontos fortes e fracos do mocha.js, mas foi apenas recomendado a mim por alguém em quem confio na comunidade JS.

Lista de recursos, conforme relatado pelo site:

  • suporte ao navegador
  • suporte assíncrono simples, incluindo promessas
  • relatório de cobertura de teste
  • suporte a diff de cordas
  • javascript # API para testes em execução
  • status de saída adequado para suporte de CI, etc.
  • auto-detecta e desativa a coloração para não-ttys
  • mapeia exceções não capturadas para o caso de teste correto
  • suporte a tempo limite de teste assíncrono
  • tempos limite específicos de teste
  • suporte de notificação de rosnado
  • relatórios durações de teste
  • destaca testes lentos
  • suporte a observador de arquivos
  • detecção de vazamento variável global
  • opcionalmente, execute testes que correspondam a um regexp
  • auto-exit para evitar "enforcamento" com um loop ativo
  • facilmente meta-gerar suites e casos de teste
  • Suporte de arquivo mocha.opts
  • Títulos de conjuntos clicáveis ​​para filtrar a execução de testes
  • suporte a depurador de nó
  • detecta várias chamadas para done ()
  • usar qualquer biblioteca de asserção que você quiser
  • relatório extensível, empacotado com mais de 9 repórteres
  • DSLs de teste extensível ou "interfaces"
  • antes, depois, antes de cada, depois de cada gancho
  • suporte arbitrário ao transpiler (script de café, etc)
  • Pacote TextMate

yolpo

Isso não existe mais, redireciona para sequential.js

Yolpo é uma ferramenta para visualizar a execução do javascript. Os desenvolvedores da API Javascript são incentivados a escrever seus casos de uso para mostrar e informar sua API. Tais casos de uso formam a base dos testes de regressão.

AVA

AVA

Corredor de teste futurista com suporte integrado para o ES2015. Mesmo que o JavaScript seja single-threaded, o IO no Node.js pode acontecer em paralelo devido à sua natureza assíncrona. AVA aproveita isso e executa seus testes simultaneamente, o que é especialmente benéfico para testes pesados ​​de IO. Além disso, os arquivos de teste são executados em paralelo como processos separados, oferecendo desempenho ainda melhor e um ambiente isolado para cada arquivo de teste.

  • Mínimo e rápido
  • Sintaxe de teste simples
  • Executa testes simultaneamente
  • Força a escrita de testes atômicos
  • Não há globais implícitos
  • Ambiente isolado para cada arquivo de teste
  • Escreva seus testes no ES2015
  • Apoio de promessa
  • Suporte à função de gerador
  • Suporte à função assíncrona
  • Suporte observável
  • Reforçada afirma
  • Opcional TAP o utput
  • Limpar traços de pilha

Buster.js

Um executor de testes JavaScript construído com o Node.js. Muito modular e flexível. Ele vem com sua própria biblioteca de asserções, mas você pode adicionar o seu próprio, se quiser. A biblioteca de asserções é dissociada, então você também pode usá-la com outros corredores de teste. Em vez de usar assert(!...) ou expect(...).not... , ele usa refute(...) que é uma boa reviravolta.

Um kit de ferramentas de teste JavaScript do navegador. Ele faz testes de navegador com automação de navegador (pense em JsTestDriver), teste de página HTML estático estilo QUnit, testes em navegadores sem cabeçalho (PhantomJS, jsdom, ...) e muito mais. Dê uma olhada na visão geral !

Um kit de ferramentas de teste do Node.js. Você obtém a mesma biblioteca de casos de teste, biblioteca de asserções, etc. Isso também é ótimo para o navegador híbrido e o código Node.js. Escreva seu caso de teste com o Buster.JS e execute-o em Node.js e em um navegador real.

Screencast: Buster.js Começando (2:45)

pros :

  • Usa node.js, compatível com Win / OS X / Linux
  • Execute testes de um navegador ou sem cabeça com o PhantomJS (em breve)
  • Executar em vários clientes de uma só vez
  • Suporta o teste NodeJS
  • Não é necessário executar servidor / clientes no computador de desenvolvimento (não é necessário o IE)
  • Executar testes a partir de uma linha de comando (pode ser integrado em ant / maven)
  • Escrever testes xUnit ou estilo BDD
  • Suporta vários frameworks de teste JavaScript
  • Adie os testes em vez de comentá-los
  • SinonJS embutido
  • Testes de execução automática salvos
  • Solicitações de proxies entre domínios
  • Possível personalizar:
    • Estendê-lo para envolver outras estruturas de teste (JsTestDriver embutido)
    • Suas próprias afirmações / refuta
    • Repórteres (xUnit XML, pontos tradicionais, especificação, toque, TeamCity e mais integrado)
    • Personalizar / substituir o HTML usado para executar os testes do navegador
  • Integração TextMate e Emacs

Contras :

  • Ainda em beta assim pode ser buggy
  • Nenhum plugin para o Eclipse / IntelliJ (ainda)
  • Não agrupa os resultados por os / browser / version como TestSwarm *. No entanto, imprime o nome e a versão do navegador nos resultados do teste.
  • Não há histórico de resultados de testes anteriores, como o TestSwarm *
  • Não funciona totalmente no Windows a partir de maio de 2014

* O TestSwarm também é um servidor de Integração Contínua, enquanto você precisa de um servidor de CI separado para o Buster.js. No entanto, ele produz relatórios xUnit XML, portanto, deve ser fácil integrá-los com o Hudson , o Bamboo ou outros servidores de IC.

TestSwarm

https://github.com/jquery/testswarm

TestSwarm oficialmente não está mais em desenvolvimento ativo, como indicado em sua página do GitHub. Eles recomendam o Karma, o navegador da plataforma do navegador ou o Intern.

Jasmine

Essa é uma estrutura orientada a comportamento (conforme indicado na citação abaixo) que pode interessar aos desenvolvedores familiarizados com Ruby ou Ruby on Rails. A sintaxe é baseada no RSpec que é usado para testes em projetos Rails.

As especificações do Jasmine podem ser executadas a partir de uma página html (na forma qUnit) ou de um executor de teste (como Karma).

O Jasmine é uma estrutura de desenvolvimento orientada por comportamento para testar seu código JavaScript. Não depende de nenhum outro framework JavaScript. Não requer um DOM.

Se você tem experiência com esta estrutura de testes, por favor, contribua com mais informações :)

Casa do projeto: Jasmine

QUnit

A QUnit se concentra em testar o JavaScript no navegador, oferecendo a maior comodidade possível para o desenvolvedor. A partir do site:

O QUnit é um pacote de teste de unidade JavaScript poderoso e fácil de usar. Ele é usado pelos projetos jQuery, jQuery UI e jQuery Mobile e é capaz de testar qualquer código JavaScript genérico

O QUnit compartilha um pouco do histórico com o TestSwarm (acima):

O QUnit foi originalmente desenvolvido por John Resig como parte do jQuery. Em 2008, ele recebeu sua própria home page, nome e documentação da API, permitindo que outras pessoas a utilizem para o teste de unidade. Na época, ainda dependia da jQuery. Uma reescrita em 2009 corrigiu isso, agora o QUnit é executado completamente autônomo. Os métodos de asserção de QUnit seguem a especificação CommonJS Unit Testing, que foi até certo ponto influenciada pelo QUnit.

Página inicial do projeto: QUnit

Sinon

Outra grande ferramenta é a sinon.js, de Christian Johansen, autor de Test-Driven JavaScript Development . Melhor descrito por ele mesmo:

Espiões, stubs e simulados de teste independentes para JavaScript. Nenhuma dependência funciona com qualquer estrutura de teste de unidade.

Estagiário

O site Interno fornece uma comparação direta de recursos com as outras estruturas de teste nesta lista. Ele oferece mais recursos prontos do que qualquer outro sistema de teste baseado em JavaScript.

JEST

Um novo mas ainda muito poderoso framework de testes. Ele permite testes baseados em snapshots, o que aumenta a velocidade do teste e cria uma nova dinâmica em termos de teste.

Confira uma de suas palestras: https://www.youtube.com/watch?v=cAKYQpTC7MA

Melhor ainda: Começando


google-js-test:

Estrutura de teste de JavaScript lançada pelo Google: https://github.com/google/gjstest

  • Início de teste e tempo de execução extremamente rápidos, sem ter que executar um navegador.
  • Saída legível e limpa no caso de testes de aprovação e reprovação.
  • Um executor de testes baseado em navegador que pode ser simplesmente atualizado sempre que JS é alterado.
  • Estilo e semântica que se assemelham ao Google Test for C ++.
  • Uma estrutura de simulação embutida que requer o mínimo de código clichê (por exemplo, sem $tearDown ou $verifyAll ) com estilo e semântica baseados no Google C ++ Mocking Framework .

Atualmente não há binários para o Windows


A YUI também tem uma estrutura de testes . Este vídeo do Yahoo! O teatro é uma boa introdução, embora haja muitos aspectos básicos sobre o TDD na frente.

Essa estrutura é genérica e pode ser executada em qualquer biblioteca JavaScript ou JS.


Adicionamos a integração do JUnit ao nosso gerador de código Java para Javascript ST-JS ( http://st-js.org ). O framework gera um Javascript correspondente para o código testado e para os testes unitários e envia o código para diferentes navegadores.

Não há necessidade de um servidor separado, pois o executor de teste de unidade abre a porta http necessária (e a fecha assim que os testes terminam). O framework manipula o stacktrace Java para que as declarações com falha sejam exibidas corretamente pelo plug-in do JUnit Eclipse. Aqui está um exemplo simples com jQuery e Mockjax:

@RunWith(STJSTestDriverRunner.class)
@HTMLFixture("<div id='fortune'></div>")

@Scripts({ "classpath://jquery.js",
       "classpath://jquery.mockjax.js", "classpath://json2.js" })
public class MockjaxExampleTest {
  @Test
  public void myTest() {
    $.ajaxSetup($map("async", false));
    $.mockjax(new MockjaxOptions() {
      {
        url = "/restful/fortune";
        responseText = new Fortune() {
          {
            status = "success";
            fortune = "Are you a turtle?";
          }
        };
      }
    });

    $.getJSON("/restful/fortune", null, new Callback3<Fortune, String, JQueryXHR>() {
      @Override
      public void $invoke(Fortune response, String p2, JQueryXHR p3) {
        if (response.status.equals("success")) {
          $("#fortune").html("Your fortune is: " + response.fortune);
        } else {
          $("#fortune").html("Things do not look good, no fortune was told");
        }

      }
    });
    assertEquals("Your fortune is: Are you a turtle?", $("#fortune").html());
  }

  private static class Fortune {
    public String status;
    public String fortune;
  }
}


Você deve dar uma olhada no env.js Veja meu blog para um exemplo de como escrever testes unitários com env.js.


Você também pode estar interessado na estrutura de teste de unidade que faz parte do qooxdoo , uma estrutura de RIA de código-fonte aberto semelhante ao Dojo, ExtJS, etc., mas com uma cadeia de ferramentas bastante abrangente.

Experimente a versão online do testrunner . Dica: acerte a seta cinza no canto superior esquerdo (deve ficar mais óbvio). É um botão "play" que executa os testes selecionados.

Para saber mais sobre as classes JS que permitem definir seus testes de unidade, consulte o visualizador de APIs on-line.

Para testes automatizados de interface do usuário (com base no Selenium RC), confira o projeto Simulator .






tdd