无法在 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
上查看示例
我创建了一个像这样的简单测试:
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
上查看示例