Laravel (Dingo) で API をビルドしましたが、完全に動作します。ただし、API を単体テストするための phpunit の実装に問題があります。
class ProductControllerTest extends TestCase
{
public function testInsertProductCase()
{
$data = array(
, "description" => "Expensive Pen"
, "price" => 100
);
$server = array();
$this->be($this->apiUser);
$this->response = $this->call('POST', '/products', [], [], $server, json_encode($data));
$this->assertTrue($this->response->isOk());
$this->assertJson($this->response->getContent());
}
}
その間、私のAPIエンドポイントはこのコントローラー関数を指しています
private function store()
{
// This always returns null
$shortInput = Input::only("price");
$rules = [
"price" => ["required"]
];
$validator = Validator::make($shortInput, $rules);
// the code continues
...
}
ただし、API がペイロードを認識できないため、常に失敗します。Input::getContent() は JSON を返しますが、Input::only() は空白を返します。これは、要求ペイロードのコンテンツ タイプが JSON の場合にのみ Input::only() が値を返すためです。
では、上記の phpunit コードを content-type application/json を使用するように設定するにはどうすればよいですか? 何か関係があるのではないかと推測しているのですが$server
、よくわかりません
編集:実際には、私の最初の考え方には2つの問題があります
- Input::getContent() は 6 番目のパラメーターを入力したため機能しますが、Input::only() は 3 番目のパラメーターを入力しなかったため機能しません。@shaddyに感謝
- phpunitリクエストヘッダーでコンテンツタイプを設定する方法はまだ答えられていません
ありがとうございます