PHPUnitを使用してSlimアプリケーションのエンドポイントをテストしたいと思います。リクエストボディは常に空であるため、私はPOSTリクエストを模擬するのに苦労しています。PHPUnitでモックスリムエンドポイントPOSTリクエスト
- 、ここで説明したように、私はアプローチを試してみた:Slim Framework endpoint unit testing。私が直接
php://input
への書き込みをしようとした - (環境変数
slim-input
を追加すること)が、私は(苦労)
環境のエミュレーションは、例えばとして正しく動作する読み取り専用であるphp://input
を見つけましたREQUEST_URI
は常に期待通りです。私は、要求の本文がSlim\Http\RequestBody
でphp://input
から読み出されていることを知りました。
注:
- 私が直接コントローラメソッドを呼び出さないようにしたいので、私は、エンドポイントを含むすべてのものを、テストすることができます。
- 実際にリクエストを送信するので、
guzzle
を避けたいです。私はアプリケーションをテストしている間にサーバを稼動させたくない。これまで
私のテストコード:(私はstackoverflowの上のコードを簡略化してきたことに注意してください)
//inherits from Slim/App
$this->app = new SyncApiApp();
// write json to //temp, does not work
$tmp_handle = fopen('php://temp', 'w+');
fwrite($tmp_handle, $json);
rewind($tmp_handle);
fclose($tmp_handle);
//override environment
$this->app->container["environment"] =
Environment::mock(
[
'REQUEST_METHOD' => 'POST',
'REQUEST_URI' => '/1.0/' . $relativeLink,
'slim.input' => $json,
'SERVER_NAME' => 'localhost',
'CONTENT_TYPE' => 'application/json;charset=utf8'
]
);
//run the application
$response = $this->app->run();
//result: the correct endpoint is reached, but $request->getBody() is empty
プロジェクト全体: https://github.com/famoser/SyncApi/blob/master/Famoser.SyncApi.Webpage/tests/Famoser/SyncApi/Tests/
注2:私はで求めてきました slimframeworkフォーラム、リンク: http://discourse.slimframework.com/t/mock-slim-endpoint-post-requests-with-phpunit/973 stackoverflowとdiscourse.slimframeworkの両方を最新の状態に保ちます。
注3: この機能のための私の現在開いてプルリクエストがあります:https://github.com/slimphp/Slim/pull/2086
にありましたグズル? – Tebe
私は自分の質問のタイトルを変更しました。 PHPUnitを使用してエンドポイントをテストしたい –
サンプルのエンドポイントとテストを教えてください。あなたの提供するコードが何をしようとしているのか分かりません。 – nerdlyist