#laravel #testing #tdd #laravel-artisan
Вопрос:
Я играю с тестом в Laravel и хочу протестировать одну и ту же функцию с разными пользователями, которых я создал. Есть ли способ передать идентификатор в качестве аргумента для консоли 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.
Ответ №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"
Вы можете прибегнуть к безобидному варианту. Например, если вы хотите передать целое число, соответствующее идентификатору пользователя (как вы, вероятно, делаете), вы, вероятно, могли бы сделать
$ 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"