• Czas czytania ~1 min
  • 11.02.2024

Przyglądając się uważnie dokumentacji testów HTTP Laravel, zauważysz kilka przydatnych pomocników wbudowanych TestResponse w klasę do debugowania odpowiedzi HTTP. Ta klasa miała ostatnio kilka wewnętrznych aktualizacji tych metod w postaci cechy zrzucania Laravela 11 i pomyślałem, że to dobry moment, aby ponownie odwiedzić tych przydatnych pomocników:Te metody mają dd() również odpowiednik, który "umrze i zrzuci" wartości odpowiedzi:Te metody są pomocnymi skrótami do zrobienia tego samemu w teście:

$response = $this->get('/');

$response->dump();
$response->dumpHeaders();
$response->dumpSession();

$response->dd();
$response->ddHeaders();
$response->ddSession();

dump($response->headers->all());
// or
dd($response->headers->all());

Jednak tam, gdzie te metody błyszczą, jest modyfikowanie istniejącego testu, który łączy różne asercje w instancjiTestResponse:

$this->postJson(route('post.store', $post))
    ->assertSessionHasNoErrors()
    ->assertCreated()
    ->assertJson(['created' => true]);

Powiedzmy, że assertSessionHasNoErrors() kończy się niepowodzeniem i chcę debugować. Zauważyłem, że kiedy natknę się na łańcuch, który nie przypisuje odpowiedzi, przypisuję odpowiedź do zmiennej lokalnej w następujący sposób:

$response = $this->postJson(route('post.store', $post));

dd($response);

$response
    ->assertSessionHasNoErrors()
    ->assertCreated()
    ->assertJson(['created' => true]);

Nie będę się spierał, czy powinieneś łączyć asercje i nigdy nie przypisywać zmiennej lokalnej - to bardziej preferencja stylu - ale natkniesz się na sytuacje, w których żadna zmienna lokalna nie jest przypisana. Korzystając z tych metod debugowania, możemy szybko debugować tuż przed niepowodzeniem testu:

$this->postJson(route('post.store', $post))
+   ->dumpSession()
    ->assertSessionHasNoErrors()
    ->assertCreated()
    ->assertJson(['created' => true]);

Ci pomocnicy debugowania są przydatni, gdy chcesz debugować odpowiedź gdzieś między różnymi asercjami bez przechwytywania instancji TestResponse w zmiennej lokalnej.

Dowiedz się więcej

Te funkcje (i nie tylko) są omówione w dokumentacji Laravela dla testów HTTP wraz z innymi przydatnymi TestResponse funkcjami, które sprawiają, że asercja JSON jest dziecinnie prosta.

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

O

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

O autorze CrazyBoy49z
WORK EXPERIENCE
Kontakt
Ukraine, Lutsk
+380979856297