Se você está desenvolvendo uma aplicação AngularJS, use Protractor para testá-la. Porquê?
Protractor é um framework de testes funcionais para aplicações AngularJS e funciona como uma solução integradora combinando poderosas ferramentas e tecnologias tais como NodeJS, Selenium, webDriver, Jasmine, Cucumber e Mocha.
Tem um monte de customizações do Selenium para facilitar a criação de testes para aplicações AngularJS
Protractor também acelera seus testes como evita a necessidade do uso de "sleeps" e "waits" em seus testes tendo estes otimizados internamente.
Como é baseado nos conceitos do AngularJS, fácil aprender Protractor se você já conhece sobre AngularJS e vice e versa.
Protractor permite que seus testes sejam organizados baseados no Jasmine, isso permite que você escreva ambos testes unitários e funcionais no Jasmine.
Executa em navegadores reais e headless.
O que mais você precisa de um framework de testes automatizados?
Entendendo o Protractor mais a fundo
A primeira versão do Protractor foi lançada em julho de 2013, onde o framework era basicamente um protótipo de um framework de testes. Porém a Google, com o apoio da comunidade de testes, está evoluindo o framework para acompanhar a evolução do AngularJS e para satisfazer as necessidades da comunidade que está usando-o.
O projeto do Protractor é publico no Github e você pode acompanhar as issues do projeto, adicionar issues que você ache interessante, comentar nas issues abertas pelos outros, fazer pull requests para colaborar com o projeto, etc. Qualquer um que esteja interessado em colaborar com o crescimento do projeto será bem vindo!
O Protractor é um framework de automação de testes funcionais, então o intuito dele não é ser a única forma de testar a sua aplicação AngularJS, mas sim cobrir os critérios de aceitação exigidos pelo usuário. Mesmo existindo testes que execute a nível de UI, com o Protractor ainda é necessário a criação de testes unitário e de integração. Esse é um framework para testes funcionais que roda em cima do Selenium, então ele já contêm todos os benefícios e facilidades do mesmo além das funcionalidades que ele provê para testar aplicações AngularJS especificamente. Pelo fato do Protractor rodar em cima do Selenium é possível a utlização dos drivers que implementam o WebDriver, tais como ChromeDriver e GhostDriver. No caso do ChromeDriver é possível rodar os testes em cima dele sem a necessidade do Selenium Server. Já para utilizar o GhostDriver é necessário a utilização do PhantomJS, o qual se utiliza do GhostDriver e neste caso permite rodar os testes em Headless mode.
O framework permite que seja utilizado Jasmine para organizar e criar seus testes e resultados esperados. O Jasmine é compatível com o Protractor pelo fato de todos os recursos que são extraídos do browser para fazer os testes são promises e o comando expect do Jasmine trata internamente essas promises e faz parecer transparente as validações dos testes.
No início, como o Protractor ainda era recente e ainda em fase maturação, a documentação para usa-lo era restrita e ficava desatualizada rapidamente devido a evolução sua constante. Porém nos últimos meses a colaboração da comunidade tem crescido bastante e essa documentação tem sido mantido mais atualizada, isso deve-se a facilidade que a comunidade tem de questionar e colaborar através do projeto publico no Github. A única burocracia é que você precisa assinar o contrato digital de colaborador da Google.
Como você testa a sua aplicação AngularJS? Qual é a sua experiência com Protractor?
Aviso: As afirmações e opiniões expressas neste artigo são de responsabilidade de quem o assina, e não necessariamente refletem as posições da Thoughtworks.