Esses dias usei o PhantomJS para converter uma imagem em SVG para PNG, e gostei bastante, tanto que dei uma olhada mais a fundo em como ele pode ser usado. E umas das formas é para testar aplicações.
Com o Phantom você pode testar de forma headless, ou seja, sem usar a interface gráfica, o que resulta numa diminuição do tempo dos testes.
Mas ele por si só não é um framework de teste, portanto quando usado pra testar você geralmente vai querer usar algum framework de teste como o Jasmine.
Pra minha brincadeira eu acabei usando apenas o CasperJS, que abstrai o PhantomJS visando a execução de testes. Assim sendo ele nos dá funções de navegação, preenchimento de campos, screenshot, etc.
Após instalar o PhantomJS e o CasperJS (versão 1.1 beta 1). Dei uma olhada nos samples do Casper, e usei o “googletesting.coffee”, para entender como ele funciona, e fiz uma pequena mudança, para capturar um screenshot no último teste, como pode ser visto no código abaixo:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Google sample testing. | |
# | |
# Usage: | |
# $ casperjs test googletesting.coffee | |
casper.test.begin 'Google search retrieves 10 or more results', 5, (test) -> | |
casper.start "http://www.google.fr/", -> | |
test.assertTitle "Google", "google homepage title is the one expected" | |
test.assertExists 'form[action="/search"]', "main form is found" | |
@fill 'form[action="/search"]', q: "foo", true | |
casper.then -> | |
test.assertTitle "foo – Recherche Google", "google title is ok" | |
test.assertUrlMatch /q=foo/, "search term has been submitted" | |
test.assertEval (-> | |
__utils__.findAll("h3.r").length >= 10 | |
), "google search for \"foo\" retrieves 10 or more results" | |
casper.run -> test.done() | |
casper.test.begin "Casperjs.org is first ranked", 1, (test) -> | |
casper.start "http://www.google.fr/", -> | |
@fill "form[action=\"/search\"]", q: "casperjs", true | |
casper.then -> | |
test.assertSelectorContains ".g", "casperjs.org", "casperjs.org is first ranked" | |
@capture './search_for_casperjs.png' | |
casper.run -> test.done() | |
Como vocês podem ver, a declaração do teste é bem similar a qualquer xUnit da vida.
Portanto, se você tiver procurando formas de testar usando Javascript/CoffeeScript, o PhantomJS pode te ajudar com certeza, e o CasperJS pode ser uma opção dentre as várias existentes.
Se quiser saber mais, sobre o PhantomJS o projeto é bem documentado, portanto dê uma olhada na doc e pra saber do CasperJS, veja a documentação e principalmente os samples.
Pingback: Brincando com PhantomJS e CasperJS | Qualidade de Software