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.