【问题标题】: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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-30
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多