集合 toArray()方法应该将集合转换为普通集合array
,并将集合的所有嵌套对象Arrayable
作为数组的实例。
toArray()
方法将集合转换为普通array
对象,但不会转换嵌套对象。请注意,仅当toArray()
通过 PHPUnit 调用时才会观察到此行为。当toArray()
在应用程序内或通过 Laravel Tinker 调用函数时,它会按预期工作。
克隆、安装包、运行 PHPUnit。
<?php
namespace Tests\Unit;
use App\User;
use Illuminate\Contracts\Support\Arrayable;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class CollectionToArrayTest extends TestCase
{
use RefreshDatabase;
/** @test */
public function it_converts_nested_objects_that_are_an_instance_of_arrayable_to_an_array()
{
factory(User::class)->create();
$users = User::get();
// passed
$this->assertInstanceOf(Arrayable::class, $users[0]);
// Failed asserting that App\User Object is of type "array"
$this->assertIsArray($users->toArray()[0]);
// passed
$this->assertIsArray($users->toArray()[0]->toArray());
}
}
观察:
它以前工作过,可能与以前版本的 PHP 和 PHPUnit 一起工作,但是我无法确定它停止的那一刻。
似乎在提供的 PHPUnit 测试中对 Collection调用时未调用EnumeratesValues::toArray() 。->toArray()
Laravel 版本:7.0.7
PHP 版本:7.3.15
PHPUnit 版本:8.5.2
慕田峪9158850