recherche

Maison  >  Questions et réponses  >  le corps du texte

Tests Laravel utilisant l'unité PHP - Les tests de fichiers ne prennent pas en charge les types

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粉087074897P粉087074897478 Il y a quelques jours595

répondre à tous(1)je répondrai

  • P粉684720851

    P粉6847208512023-09-15 14:21:45

    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');

    répondre
    0
  • Annulerrépondre