【发布时间】:2020-12-17 23:35:24
【问题描述】:
在我的 Laravel 项目中,我想为单个文件运行 phpunit,如下所示:
$ composer run-script test tests/Unit/Services/OrderServiceTest.php
这是我的作曲家设置:
"scripts": {
"test": [
"@testenv",
"@phpunit"
],
"testenv": [
"php artisan config:cache --env=testing",
"php artisan config:clear"
],
"phpunit": [
"php ./vendor/phpunit/phpunit/phpunit --"
]
}
但是,我遇到了这个错误:
www@287dd7480e22:/var/www$ composer run-script test tests/Unit/Services/OrderServiceTest.php
php artisan config:cache --env=testing 'tests/Unit/Services/OrderServiceTest.php'
参数过多,预期参数“命令”。
注意:
- 我看过这个帖子:How do you pass an argument to a composer script from the command line?。但是解决方案(在自定义作曲家脚本末尾添加
--)不适用于我的情况,或者我无法正确理解。 - 如果我不传递参数,脚本运行没有问题。 (即为所有测试文件运行 phpunit)
【问题讨论】:
-
可能是因为你的参数被传递给你的两个命令,第一个是
artisan命令,它不接受错误提到的这样的参数。您可以做的是将您的命令分成两部分:composer test-env && composer phpunit tests/Unit/Services/OrderServiceTest.php(或 Windows 下的(composer test-env) -and (composer phpunit tests/Unit/Services/OrderServiceTest.php))。可能有一种方法可以将您的参数仅传递给最后一个命令,但我不知道。 -
@Jeto 我知道确切的原因,我想以更优雅的方式解决它:只将你的参数传递给最后一个命令 - 是的
-
另一种方法是让您的
test脚本成为带有php artisan config:cache --env=testing && php artisan config:clear && @phpunit的单个条目(因为遗憾的是,@testenv && @phpunit不起作用),这应该完全符合您的要求,但那是在 composer.json 文件中复制@testenv命令行并不理想。无论如何,我在这里没有看到任何完美的解决方案,但也许其他人知道。
标签: php laravel composer-php phpunit