suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Laravel-Tests mit PHP-Einheit – Dateitests unterstützen keine Typen

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粉087074897P粉087074897559 Tage vor649

Antworte allen(1)Ich werde antworten

  • P粉684720851

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

    错误是您传递的值与 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');

    Antwort
    0
  • StornierenAntwort