Integrando o PHPUnit e o PHPSpec ao CodeIgniter e ao Lumine Framework

Meu grande amigo português Ricardo Mestre me fez a seguinte pergunta esses dias:

Como faço para usar o PHPUnit no CodeIgniter?

O que vou mostrar aqui serve para esses dois frameworks (PHPUnit e PHPSpec) ou para qualquer um outro framework que necessite.

Seguinte, o CodeIgniter possui sua configuração de acesso no index.php, só que na penúltima linha, ele faz chamada ao arquivo BASEPATH.’codeigniter/CodeIgniter.php’;. Quando é requisitado, ele faz a requisição aos arquivos de inicialização e executa o método index da classe default dentro do arquivo system/application/config/routes.php. (UPDATE: o arquivo que define do controlador default a ser chamado assim que a aplicação funcina é em routes.php)

Aí, para usarmos os controladores do CI é necessário utilizar esse arquivo de configuração por conta das contantes que o CI utiliza. Para evitar de quando executarmos nossas classes de testes, elas não venham a executar por conta da saída do CI.

Então, é necessário fazer um arquivo com o mesmo contéudo do index.php, exceto da linha BASEPATH.’codeigniter/CodeIgniter.php’;. Ao fazermos isso é necessário chamar as bibliotecas básicas do CodeIgniter manualmente que estão dentro da pasta /system/codeigniter/. As bibliotecas são BaseN.php (4 para o PHP 4 e 5 para o PHP 5). Common.php e como vamos fazer teste dos controladores, é necessário importar a classe Controlller.php que está dentro da pasta /system/libraries/.

Após isso é só incluir esse arquivo criado dentro das classes de testes.

Resumindo:

  1. Criar arquivo com contéudo do index.php excluindo a penúltima linha que faz chamada ao BASEPATH.’codeigniter/CodeIgniter.php’;
  2. Incluir dentro desse arquivo chamada para /system/codeigniter/BaseN.php (N = 4 ou N = 5);
  3. Incluir dentro desse arquivo chamada para /system/codeigniter/Common.php;
  4. Incluir dentro desse arquivo chamada para /system/libraries/Controller.php;

Bom, agora para utilizar os Models do Lumine, é apenas necessário fazer chamada ao arquivo com as configurações de acesso do Lumine. A critério de convenção, podemos criar um novo arquivo de configuração apenas alterando o nome do banco de dados, assim não prejudicando seu banco de dados.

Depois disso tudo podemos testar nossos controladores e os modelos do Lumine com o PHPUnit, PHPSpec ou qualquer outro framework de testes.

Até a próxima!


2 Responses to “Integrando o PHPUnit e o PHPSpec ao CodeIgniter e ao Lumine Framework”

  • felipe bastos Says:

    precisa disso tudo?, em momento algum vi falando de integração dos frameworks.
    por que reescrever o arquivo, não ficou nada claro. vc quer evitar ficando chamar a library ?, no config.php vc pode colocar para carregar automaticamente.
    com o FPDF eu simplesmente mudei o nome da classe para CI_FPDF e o construtor … analisei rapidamente o code e mudei o diretorio da pasta de fontes.

    daí foi só jogar na library/ o fpdf e a pasta de fontes e tudo funcionou normalmente.

    ainda não testei com o phpUnit, farei nos proximos dias .. vo gravar se site nos favoritos para lhe dar um retorno, e quem sabe fazer um post sobre isso.. hehehe.. então, até breve!

  • Cairo Noleto Says:

    Na realidade sim, precisa disso tudo. Não tem como tu apenas importar o index.php padrão, por que ele carrega o controlador padrão que tu definiu nas rotas e faz chamada ao método index.

    Se tu apenas importar o controlador diretamente para fazer testes, terá que ter todos as classes e funções de que o controlador precisa pra funcionar corretamente carregados.

    Diferentemente do FPDF que é apenas uma biblioteca, PHPUnit e PHPSpec são frameworks, e como tal eles tem seus próprios padrões. Nesse tutorial eu explico como eu tive que fazer para criar testes de meus controladores e modelos usando esses frameworks.

    Eu também escrevi um novo artigo sobre como eu cheguei a esse ponto http://www.caironoleto.com/2008/08/12/criando-testes-com-phpunit/

    :D

Leave a Reply