如何在没有Cake控制台的情况下使用CakePHP测试运行PHPUnit?

时间:2014-09-09 15:19:33

标签: cakephp gruntjs phpunit cakephp-2.5

我想用Grunt自动化CakePHP测试,并找到grunt.loadNpmTasks('grunt-phpunit');,它可以自动化PHPUnit,但我确信它无法处理cake test

我对从Grunt运行cake test的解决方案感到满意,但我真的对运行PHPUnit命令感兴趣,该命令可以执行CakePHP测试。

编辑:我使用CakePHP的当前稳定版本,现在是2.5.4。

2 个答案:

答案 0 :(得分:0)

我认为grunt-phpunit期望默认的标准phpunit执行,如果这是真的你不能以那种方式运行它你将不得不熟练这个工具。我想它正在解析测试输出。 CakePHP2不允许你像现在和其他库一样运行“phpunit”。 CakePHP2扩展了phpunit测试类,所以我怀疑你可以在不使用cakephp测试shell的情况下运行它们。

我们使用Jenkins和我们自己定制的脚本来自动化测试。

答案 1 :(得分:0)

我找到了解决方案。

Japanese site上我发现了一个有趣的想法:

首先,我必须将webroot/test.php复制为webroot/phpunit.php,并替换最后一行:

--- a/webroot/test.php
+++ b/webroot/phpunit-bootstrap.php
@@ -86,4 +86,4 @@ if (Configure::read('debug') < 1) {

 require_once CAKE . 'TestSuite' . DS . 'CakeTestSuiteDispatcher.php';

-CakeTestSuiteDispatcher::run();
+App::load('CakeTestSuiteCommand');

这使得它可以用作PHPUnit的引导程序。

然后,您可以创建phpunit.xml以简化测试过程。

<?xml version="1.0" encoding="UTF-8"?>

<phpunit colors="true" stopOnFailure="false" bootstrap="webroot/phpunit-bootstrap.php">
    <testsuites>
        <testsuite name="AllTests">
            <directory suffix=".php">Test/Case</directory>
        </testsuite>
    </testsuites>
</phpunit>

现在我只需要将grunt-phpunit配置添加到我的Gruntfile.js

phpunit: {
    options: {
        bin: 'phpunit',
        configuration: 'phpunit.xml',
        colors: true,
    },
    app: {
        options: {
            testsuite: 'AllTests',
        },
    },
}

现在,如果我运行grunt phpunit,(或配置grunt watch以在更改时运行phpunit任务,并更改文件),PHPUnit将运行我的测试。