Tests Laravel utilisant l'unité PHP - Les tests de fichiers ne prennent pas en charge les types
P粉087074897
P粉087074897 2023-09-14 23:41:39
0
1
584

J'utilise Laravel 10 et Livewire 2. J'écris un test simple pour un composant, qui n'est qu'un formulaire de téléchargement. J'ai rencontré une mystérieuse erreur de message :

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▕     }

Le test est :

/** @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');
    }

Pour ce que j'ai débogué jusqu'à présent, une fois que j'appelle set() dans mon test, l'erreur est déclenchée. Je peux confirmer que le composant fonctionne lorsqu'il est utilisé.

P粉087074897
P粉087074897

répondre à tous(1)
P粉684720851

L'erreur est que la valeur que vous transmettez est incompatible avec la fonction json_encode(), je suggère ce qui suit :

$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');
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal