Laravel-Tests mit PHP-Einheit – Dateitests unterstützen keine Typen
P粉087074897
P粉087074897 2023-09-14 23:41:39
0
1
554

Ich verwende Laravel 10 und Livewire 2. Ich schreibe einen einfachen Test für eine Komponente, bei der es sich lediglich um ein Upload-Formular handelt. Ich habe einen mysteriösen Nachrichtenfehler festgestellt:

FAILED  Tests\Feature\Livewire\UploadAssetTest > book can be saved correctly                                                             
Type is not supported

  at vendor/laravel/framework/src/Illuminate/Http/JsonResponse.php:88
     84▕             default => json_encode($data, $this->encodingOptions),
     85▕         };
     86▕ 
     87▕         if (! $this->hasValidJson(json_last_error())) {
  ➜  88▕             throw new InvalidArgumentException(json_last_error_msg());
     89▕         }
     90▕ 
     91▕         return $this->update();
     92▕     }

Der Test ist:

/** @test */
    public function book_can_be_saved_correctly()
    {
        $admin = User::factory()->create();
        $this->actingAs($admin);

        Storage::fake('private');

        $testBook = UploadedFile::fake()->create('private/books/test_book.pdf');
        $testCover = UploadedFile::fake()->image('private/covers/test_image.png');

        $emptyForm = (new UploadBookService())->buildForm();

        $book = array_merge($emptyForm,[
            'title' => 'Title Test',
            'author' => 'Author Test',
            'description' => 'Description Test',
            'publishedAt' => '2022',
            'cover' => $testCover,
            'book' => $testBook,
        ]);

        $component = Livewire::test(UploadAsset::class)
            ->set('assetMeta', $book)
            ->call('save');

            Storage::assertExists('books/test_book.pdf');
            Storage::assertExists('covers/test_cover.png');
    }

Für das, was ich bisher debuggt habe, wird der Fehler ausgelöst, sobald ich set() in meinem Test aufrufe. Ich kann bestätigen, dass die Komponente im Einsatz funktioniert.

P粉087074897
P粉087074897

Antworte allen(1)
P粉684720851

错误是您传递的值与 json_encode() 函数不兼容,我建议如下:

$book = array_merge($emptyForm,[
    'title' => 'Title Test',
    'author' => 'Author Test',
    'description' => 'Description Test',
    'publishedAt' => '2022',
    'coverPath' => 'private/covers/test_image.png',
    'bookPath' => 'private/books/test_book.pdf', 
]);

$component = Livewire::test(UploadAsset::class)
    ->set('assetMeta', $book)
    ->call('save');
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!