无法在 laravel 测试单元中填充 __construct 处的属性

cant fill properties at __construct in laravel test unit

我创建了一个像这样的简单测试:

namespace Tests\Feature;

use Tests\TestCase;
use App\Models\User;
use Illuminate\Support\Facades\Config;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;

class simpleTest extends TestCase
{
    public $form_array = ['forms_data'];


    /**
     * A basic feature test example.
     *
     * @return void
     */
    public function test_example()
    {
        $response = $this->get('/');

        $response->assertStatus(200);
    }
}

上面的测试运行没有问题。 我有一个 public 属性 $form_array 在上面的例子中有一个静态值,但是当我试图用 __construct() 填充 $form_array 时测试,我得到这个错误:

  array_merge(): Argument #1 must be of type array, null given

  at vendor/phpunit/phpunit/phpunit:98
     94▕ unset($options);
     95▕ 
     96▕ require PHPUNIT_COMPOSER_INSTALL;
     97▕ 
  ➜  98▕ PHPUnit\TextUI\Command::main();
     99▕ 

代码:

namespace Tests\Feature;

use Tests\TestCase;
use App\Models\User;
use Illuminate\Support\Facades\Config;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;

class simpleTest extends TestCase
{
    public $form_array;


    public function __construct(){

        $this->form_array = ['forms_data'];

    }


    /**
     * A basic feature test example.
     *
     * @return void
     */
    public function test_example()
    {
        $response = $this->get('/');

        $response->assertStatus(200);
    }
 }

我的目标是用 laravel 中的配置文件中的值填充 $form_data,我是这样找到的:

public function __construct(){
    parent::setUp();
    $this->form_array = Config::get('ravandro.form_array');
}

但即使是简单的 $this->form_data = 'value' 也不起作用,我真的很困惑!

顺便说一句,我使用 Laravel Octane 来为我的应用程序提供服务,但我认为它对测试没有任何影响。

Php 版本:8.1
Laravel : 9
php-单位:"phpunit/phpunit":"^9.3.3"

在测试中,正确的构造函数方法称为 setUp(),它在 class 的每个测试之前运行。

您可以在 https://phpunit.readthedocs.io/en/9.5/fixtures.html#fixtures

上查看示例