【问题标题】:How to pass arguments to a test function in laravel throw console如何在 laravel throw 控制台中将参数传递给测试函数
【发布时间】:2021-07-12 02:02:05
【问题描述】:
我在 Laravel 中进行测试,我想用我创建的不同用户测试相同的功能。有没有办法将 id 作为参数传递给 laravel 控制台?我的意思是,写这样的东西:
/** @test */
public function my_test_function($id)
{
$user = User::find($id);
..........................}
然后调用:
php artisan test --filter my_test_function ....... plus something to pass the id.
【问题讨论】:
标签:
laravel
testing
tdd
laravel-artisan
【解决方案1】:
cli 参数可在全局命名空间中访问。您可以使用以下方式检索和转储它们:
/** @test */
public function my_test()
{
global $argv;
var_dump($argv);
$this->assertTrue(true);
}
然而,phpunit 不应该允许任意参数
$ vendor/bin/phpunit -u 1
PHPUnit 9.5.4 by Sebastian Bergmann and contributors.
Unknown option "-u"
您可以借助一种无害的选择。例如,如果你打算传递一个整数来匹配 user_id(你可能会这样做),你可能会这样做
$ vendor/bin/phpunit --exclude-group 14
只要你没有真正的测试组“14”,并且有转储显示:
array (3) [
0 => string (15) "vendor/bin/pest"
1 => string (15) "--exclude-group"
2 => string (2) "14"
]
您不需要编写自己的解析规则来处理这些参数,但它仍然 - 正如我所说的 - 捎带,它可能会以多种方式中断。在进一步采用这种方法之前,我建议使用在可执行文件之前定义的环境变量
$ APP_USER_ID=14 vendor/bin/phpunit
你可以用它来检索
/** @test */
public function my_test()
{
var_dump(getenv('APP_USER_ID'));
$this->assertTrue(true);
}
转储将显示您正在寻找的值而不涉及参数解析
string (2) "14"