預期行為:集合 toArray()方法應該將集合轉換為普通集合array,并將集合的所有嵌套對象Arrayable作為數組的實例。實際行為:toArray()方法將集合轉換為普通array對象,但不會轉換嵌套對象。請注意,僅當toArray()通過 PHPUnit 調用時才會觀察到此行為。當toArray()在應用程序內或通過 Laravel Tinker 調用函數時,它會按預期工作。重現步驟:測試失敗的存儲庫克隆、安裝包、運行 PHPUnit。 <?phpnamespace 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.7PHP 版本:7.3.15PHPUnit 版本:8.5.2
1 回答

慕田峪9158850
TA貢獻1794條經驗 獲得超7個贊
解決了這個問題。
我在全球范圍內安裝了 Laravel Valet 和 PHPUnit。Valet 需要tightenco/collect
與 Laravel Collections 沖突的包。
運行 PHPUnit 時,\Illuminate\Support\Collection
被替換為Tightenco\Collect\Support\Collection
不同的工作方式。
因此,我刪除了全局 PHPUnit 并改用本地版本。
我創建了一個GitHub 問題
- 1 回答
- 0 關注
- 142 瀏覽
添加回答
舉報
0/150
提交
取消