Teste contínuo de PHP com GruntJS e PHPUnit

Grunt ( http://gruntjs.com/ ) é a nossa ferramenta preferida aqui mencionada ( https://mention.com ) quando se trata de automação de tarefas.
É um executor de tarefas Javascript, oferecendo vários plug-ins agrupados para tarefas comuns, ao mesmo tempo em que é muito extensível, oferecendo a opção de escrever todos os tipos de tarefas para atender às suas necessidades. O melhor acontece quando você pode combinar tarefas para criar tarefas ainda mais poderosas!

O escopo do Grunt vai além de simplesmente automatizar tarefas relacionadas ao front-end. Nós o usamos, por exemplo, para testar continuamente em PHP enquanto desenvolvemos:

 var log, terminal;

terminal
= require('color-terminal');

log
= function(error, stdout, stderr, cb) {
if (error) {
terminal
.color('red').write(stdout);
} else {
terminal
.color('green').write(stdout);
}
return cb();
};

module.exports = function(grunt) {
grunt
.loadNpmTasks('grunt-contrib-watch');
grunt
.loadNpmTasks('grunt-shell');
grunt
.initConfig({
testFilepath
: null,
watch
: {
php
: {
options
: {
event: 'changed',
spawn
: false
},
files
: ['foo/bar/**/*.php', 'foo/bar/**/*Test.php'],
tasks
: 'shell:phpunit'
}
},
shell
: {
phpunit
: {
options
: {
callback
: log
},
command
: 'echo <%= testFilepath %> && phpunit -c app <%= testFilepath %>'
}
}
});
return grunt.event.on('watch', function(action, filepath, ext) {
var regex, testFilepath;
regex
= new RegExp("foo/bar/([a-z0-9]+)/([a-z0-9/]+)", "i");
if (filepath.match(regex)) {
if (filepath.indexOf('Test') === -1) {
testFilepath
= filepath.replace(regex, "foo/bar/$1/Tests/$2Test");
} else {
testFilepath
= filepath;
}
return grunt.config('testFilepath', testFilepath);
}
});
};

Esta tarefa simples do Grunt observa os arquivos * .php e * Test.php e executa o PHPUnit com a classe de teste correta cada vez que é modificado. Simples, mas realmente eficiente durante uma sessão de codificação intensa.

Quer saber mais? Aqui está a lista de nossas ferramentas de front-end favoritas: http://blog.mention.com/the-5-best-front-end-developer-tools/