我正在使用 php artisan test 来执行我的测试,但现在我有太多的测试,我希望能够选择运行哪一个。我熟悉PHPUnit中的测试组,我只是不知道如何在Laravel的情况下应用它,因为phpunit.xml是在这里动态生成的。
由于
答案 0 :(得分:0)
您可以使用@group annotation对PHPUnit测试进行分组。我怀疑你也可以从工匠那里引用这个小组:http://laravel.com/docs/artisan/commands#unit-tests
您可以将@group放在测试类上,或者只是测试方法。您可以在类/方法上放置多个组。这样你就可以组织它们。
答案 1 :(得分:0)
如果不修改Laravel的几个核心文件,就无法做到这一点。 我非常需要这个功能,所以继续向Laravel添加功能。
以下是Laravel 3: 打开Laravel / cli / tasks / tests / runner.php,并用以下代码替换bundle函数:
public function bundle($bundles = array())
{
if (count($bundles) == 0)
{
$bundles = Bundle::names();
}
$is_bundle = false;
$this->base_path = path('sys').'cli'.DS.'tasks'.DS.'test'.DS;
foreach ($bundles as $bundle)
{
// To run PHPUnit for the application, bundles, and the framework
// from one task, we'll dynamically stub PHPUnit.xml files via
// the task and point the test suite to the correct directory
// based on what was requested.
if (is_dir($path = Bundle::path($bundle).'tests'))
{
$this->stub($path);
$this->test();
$is_bundle = true;
}
}
if (!$is_bundle)
{
$this->stub($path);
// Run a specific test group
$this->test($bundles[0], $bundles[1]);
}
}
然后,使用以下内容替换测试功能:
protected function test($group = null, $file = null)
{
// We'll simply fire off PHPUnit with the configuration switch
// pointing to our requested configuration file. This allows
// us to flexibly run tests for any setup.
$path = 'phpunit.xml';
// fix the spaced directories problem when using the command line
// strings with spaces inside should be wrapped in quotes.
$esc_path = escapeshellarg($path);
$group_string = '';
if ($group)
{
$group_string = '--group ' . $group . ' ';
if ($file)
{
$group_string .= path('app') . 'tests/' . $file . '.test.php';
}
else
{
$group_string .= path('app') . 'tests/' . $group . '.test.php';
}
}
passthru('phpunit --configuration '.$esc_path.' '.$group_string, $status);
@unlink($path);
// Pass through the exit status
exit($status);
}
解决方案有点笨拙,但它完成了工作。
简而言之,要为PHPUnit运行特定的测试组,请从命令行运行以下命令:
php artisan test group_name_here
这将从与组(groupname.test.php)同名的文件中运行该组。 要在特定文件中运行特定组,请指定组名称,然后指定文件名的第一部分:
php artisan test mygroupname myfilename
我猜你总是可以添加功能,允许它从目录中的所有文件中运行组名。
我希望这可以帮助那些需要这些功能的其他人:)