Ferramentas de teste de unidade JavaScript para TDD

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 de JavaScript que é totalmente compatível com TDD?

Karma ou transferidor

O Karma é um executor de testes de 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

Relacionado :

  • Devo usar o Transferidor ou Karma para meus testes de ponta a ponta?
  • O transferidor e o karma podem ser usados ​​juntos?

pros :

  • Usa node.js, compatível com Win / OS X / Linux
  • Execute testes do 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 da 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 resources, pontos fortes e pontos fracos do mocha.js, mas foi apenas recomendado a mim por alguém em quem confio na comunidade JS.

Lista de resources, conforme relatado pelo seu site:

  • suporte ao navegador
  • suporte asynchronous simples, incluindo promises
  • 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 de tempo limite de teste asynchronous
  • tempos limite específicos do teste
  • suporte de notificação de rosnado
  • relatórios de duração 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 de transpilador arbitrário (café-script etc)
  • Pacote TextMate

yolpo

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

Logotipo da 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
  • Nenhum globals implícito
  • Ambiente isolado para cada arquivo de teste
  • Escreva seus testes no ES2015
  • Apoio de promise
  • Suporte à function de gerador
  • Suporte à function assíncrona
  • Suporte observável
  • Reforçada afirma
  • Opcional TAP o utput
  • Limpar rastreamentos 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, portanto 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ática de estilo de qunit, teste em navegadores sem header (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 do 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 da 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 construído em
  • 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, tap, teamcity e mais integrados)
    • Personalizar / replace 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 resultados por os / browser / version como TestSwarm *. No entanto, ele 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 ao Hudson , ao Bamboo ou a 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 gerenciador da pilha do navegador ou o Intern.

Jasmim

Jasmim

Este é um test-runner do lado do cliente que pode interessar desenvolvedores familiarizados com Ruby ou Ruby on Rails. A syntax é baseada no RSpec que é usado para testes em projetos Rails.

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 este test-runner, por favor, contribua com mais informações 🙂

Página inicial do projeto: http://jasmine.github.io/

QUnit

O QUnit se concentra em testar JavaScript no navegador, proporcionando o máximo de conveniência possível ao 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 histórico com o TestSwarm (acima):

O QUnit foi originalmente desenvolvido por John Resig como parte do jQuery. Em 2008, obteve sua própria home page, nome e documentação da API, permitindo que outras pessoas a utilizassem 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 methods 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: http://qunitjs.com/

Sinon

Outra grande ferramenta é o sinon.js por 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 resources com as outras estruturas de teste nesta lista. Ele oferece mais resources 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

Dê uma olhada na estrutura de teste de unidade Dojo Object Harness (DOH), que é praticamente o chicote independente de estrutura para teste de unidade JavaScript e não tem nenhuma dependência do Dojo. Há uma descrição muito boa disso em aplicativos Web 2.0 de teste de unidade usando o Chicote de Objetivos Dojo .

Se você quiser automatizar o teste de interface do usuário (um ponto sensível de muitos desenvolvedores) – confira doh.robot (down temporário. Update: outro link http://dojotoolkit.org/reference-guide/util/dohrobot.html ) e dijit .robotx (temporário para baixo) . Este último é projetado para um teste de aceitação. Atualizar:

Artigos referenciados explicam como usá-los, como emular um usuário interagindo com sua interface do usuário usando mouse e / ou teclado, e como gravar uma session de teste, para que você possa “reproduzi-lo” mais tarde automaticamente.

Chutzpah – um corredor de teste de JavaScript

Eu criei um projeto de código aberto chamado Chutzpah, que é um teste para testes de unidade JavaScript. Chutzpah permite que você execute testes de unidade JavaScript a partir da linha de comando e de dentro do Visual Studio. Ele também suporta a execução no servidor de continuous integration do TeamCity.

A seção JavaScript da input da Wikipedia, List of Unit Testing Frameworks , fornece uma lista de opções disponíveis. Indica se eles funcionam no lado do cliente, no lado do servidor ou em ambos.

BusterJS

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

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

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 aprovados e reprovados.
  • Um executor de teste 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 um 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

Agora estamos usando Qunit com Pavlov e JSTestDriver juntos. Essa abordagem funciona bem para nós.

QUnit

Pavlov , fonte

jsTestDriver , source

Você tem “corre no navegador real” como um profissional, mas na minha experiência isso é um con porque é lento. Mas o que o torna valioso é a falta de emulação JS suficiente das alternativas que não são de navegador. Pode ser que, se o JS for complexo o suficiente para que apenas um teste no navegador seja suficiente, mas há mais algumas opções a serem consideradas:

HtmlUnit : “Tem um suporte JavaScript bastante bom (que está melhorando constantemente) e é capaz de funcionar mesmo com bibliotecas AJAX bastante complexas, simulando o Firefox ou o Internet Explorer, dependendo da configuração que você deseja usar.” Se a emulação for boa o suficiente para o seu uso, então será muito mais rápido do que dirigir um navegador.

Mas talvez o HtmlUnit tenha suporte JS suficiente, mas você não gosta de Java? Então talvez:

Celerity: API do Watir em execução no JRuby, com o suporte de HtmlUnit.

ou similarmente

Schnell : outro wrapper JRuby de HtmlUnit.

É claro que se o HtmlUnit não for bom o suficiente e você tiver que conduzir um navegador, então você pode considerar o Watir para comandar o seu JS .

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

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

Você também pode estar interessado na estrutura de teste de unidade que faz parte do qooxdoo , uma estrutura 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 classs 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 .

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

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

Não há necessidade de um servidor separado, pois o executor de teste da unidade abre a porta http necessária (e a fecha assim que os testes terminam). A estrutura 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("
") @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() { @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; } }

O MochiKit tem uma estrutura de testes chamada SimpleTest que parece ter sido capturada. Aqui está uma postagem do blog do autor original .