A premissa
O que o Laravel faz bem é tornar o desenvolvimento agradável; o que não gosto no momento (como muitos outros, tenho certeza) é escrever testes para minha aplicação.
Os céus se separaram, entretanto, quando descobri sobre a Codecepção . Música orquestrada começou a tocar e bem, você entendeu.
Existem alguns problemas que me fizeram tropeçar ao longo do caminho, então espero estar ajudando uma pobre alma a não sentir a necessidade de arrancar seus cabelos.
Fazendo funcionar
Ao configurar meu ambiente para usar o Codeception; havia, obviamente, algumas coisas que precisavam ser feitas para fazê-lo funcionar e organizá-lo perfeitamente dentro da estrutura do aplicativo laravel.
Essas poucas etapas que levam à minha própria dica, vou apenas llink abaixo para quem precisa de todo o processo.
Antes de começar; o seguinte pressupõe que você esteja familiarizado com o Laravel 4 e seu ambiente.
Em primeiro lugar, você pode querer verificar um par funcional de Laravel e Codeception, descrito na documentação do Codeception , que pode ser encontrada no GitHub .
Instalando o Codeception
As etapas descritas aqui por Dave Ganley irão ajudá-lo a começar a trabalhar.
Ou se você é uma pessoa mais visual, Jeffrey Way explica e demonstra as etapas neste vídeo .
Ambas as fontes não incluem uma menção aos possíveis problemas que alguém pode enfrentar após instalar o Codeception com sucesso e executar o comando “codecept run” em seu aplicativo.
Então, quando você começar a testar seu aplicativo:
Possíveis problemas e suas correções
Observe que o seguinte só é válido se você estiver usando uma versão de codeception abaixo de 1.6.7, que corrige todos os problemas que menciono abaixo
Primeiro, certifique-se de editar app / tests / customization.suite.yml e inclua o url para acessar seu aplicativo. Os testes de aceitação, a menos que seu aplicativo seja encontrado em localhost , provavelmente falharão sem isso.
config:
PhpBrowser:
url: 'http://myapp.dev'
O próximo possível problema que você pode enfrentar é que seus testes de aceitação NÃO serão concluídos com sucesso e continuarão produzindo um erro 404 ao tentar testar uma forma de navegação fora da primeira página que você carregar .
// the following is a simple Codeception example
$I = new WebGuy($scenario);
$I->wantTo('see the login page');
// the virtual user starts at the root/home page
$I->amOnPage('/');
$I->see('Login');
// the user click the login to take them to the login page
$I->click('Login');
// this will fail inexplicably with a 404 despite working correctly in your browser
$I->see('Please Sign In');
Obviamente, se isso foi corrigido e está funcionando bem para você quando você estiver lendo isso em algum momento no futuro; sinta-se à vontade para ignorar o seguinte, mas para aqueles que estão travados:
Thomas Grim detalha completamente o problema e as causas, bem como como corrigi-lo aqui .
Agora a correção do Thomas é ótima e funciona perfeitamente bem para fazer os testes rodarem, mas no meu caso; Estou trabalhando em meu aplicativo há um tempo e não tive vontade de mudar o hábito de ter que me lembrar de adicionar uma porta ao meu endereço. Além disso, meu aplicativo usa oauth e callbacks para serviços como o soundcloud, que falham quando o url solicitante difere das configurações que usei todo esse tempo. Não gostei da ideia de mudar todas essas configurações, então, em vez disso, sugiro o seguinte para qualquer pessoa em uma situação semelhante à minha.
Como Thomas explicou, a correção é fazer com que o endereço que o phpBrowser da Codeception usa esteja em uma porta diferente da porta que o apache usa. O que fiz foi adicionar um segundo Host Virtual que aponta para o mesmo aplicativo especificamente para Codeception para usar para testes de aceitação e deixar meu Host Virtual original sozinho. Muito menos doloroso.
Como resultado, você pode ter seu aplicativo acessível por meio de seu navegador na codecepção myapp.dev acessando-o por meio de test.myapp.dev . Não se esqueça de alterar o arquivo YAML !
config:
PhpBrowser:
url: 'http://test.myapp.dev:8081'
Neste ponto, não determinei quais problemas essas pequenas peculiaridades apresentam para ser capaz de automatizar esse processo em um servidor de CI como Travis, Codeship ou Wercker, mas quando eu fizer isso, adicionarei essa informação a esta dica.