預(yù)期行為:集合 toArray()方法應(yīng)該將集合轉(zhuǎn)換為普通集合array,并將集合的所有嵌套對(duì)象Arrayable作為數(shù)組的實(shí)例。實(shí)際行為:toArray()方法將集合轉(zhuǎn)換為普通array對(duì)象,但不會(huì)轉(zhuǎn)換嵌套對(duì)象。請(qǐng)注意,僅當(dāng)toArray()通過(guò) PHPUnit 調(diào)用時(shí)才會(huì)觀察到此行為。當(dāng)toArray()在應(yīng)用程序內(nèi)或通過(guò) Laravel Tinker 調(diào)用函數(shù)時(shí),它會(huì)按預(yù)期工作。重現(xiàn)步驟:測(cè)試失敗的存儲(chǔ)庫(kù)克隆、安裝包、運(yùn)行 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()); }}觀察:它以前工作過(guò),可能與以前版本的 PHP 和 PHPUnit 一起工作,但是我無(wú)法確定它停止的那一刻。似乎在提供的 PHPUnit 測(cè)試中對(duì) Collection調(diào)用時(shí)未調(diào)用EnumeratesValues::toArray() 。->toArray()Laravel 版本:7.0.7PHP 版本:7.3.15PHPUnit 版本:8.5.2
1 回答

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