Próbuję przetestować moją implementację programu obsługi Stripe webhook. Dane paskiem webhook przychodzi po drugiej stronie drutu jako surowego JSON w treści żądania POST, więc przechwytywania i dekodowania danych jako takie:Czy mogę użyć metody "call" Laravel do wysyłania surowych danych JSON w teście jednostkowym?
public function store()
{
$input = @file_get_contents("php://input");
$request = json_decode($input);
return Json::encode($request);
}
I 'm próby badanej jednostki tego kodu, ale nie mogę dowiedzieć się, jak wysłać surowe dane JSON w jednostce testowej, tak, że mogę ją odzyskać przy pomocy funkcji file_get_contents("php:input//")
. To co próbowałem (używając PHPUnit
):
protected $testRoute = 'api/stripe/webhook';
protected $validWebhookJson = <<<EOT
{
"id": "ch_14qE2r49NugaZ1RWEgerzmUI",
"object": "charge",
// and a bunch of other fields too
}
EOT;
public function testWebhookDecdoesJsonIntoObject()
{
$response = $this->call('POST', $this->testRoute, $this->validWebhookJson); // fails because `$parameters` must be an array
$response = $this->call('POST', $this->testRoute, [], [], ['CONTENT_TYPE' => 'application/json'], $this->validWebhookJson);
dd($response->getData(true)); // array(0) {} BOOOO!!! Where for to my data go?
}
Próbowałem zostały również curl
ale która stałaby żądania zewnętrznego, który nie ma sensu dla mnie z perspektywy jednostkowej testowania. Jak mogę zasymulować żądanie POST z surowymi danymi JSON w treści, które zostaną odebrane przez moją metodę store
?
Technika drugiej rozmowy wygląda mi na poprawną. Przypuszczam, że "pęczek innych pól" jest niepoprawnie sformatowany, a więc json, który w zasadzie echo jest, jest pusty. Z pewnością końcowy przecinek w obciętym przykładzie nie jest prawidłowy json. Zacznę od xdebugging store(). – scipilot