Как передать аргументы тестовой функции в консоли laravel throw

#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"