我有一个内置在 Laravel (Dingo) 中的 API,它运行良好。但是我在实现 phpunit 来对我的 API 进行单元测试时遇到问题
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() 返回空白。进一步调查这是因为 Input::only() 仅在请求有效负载的内容类型为 JSON 时才返回值
那么......我如何将我的 phpunit 代码设置为使用 content-type application/json ?我假设它一定与此有关,$server
但我不知道是什么
编辑:我原来的想法实际上有两个问题
- Input::getContent() 有效,因为我填写了第六个参数,但 Input::only() 不起作用,因为我没有填写第三个参数。感谢@shaddy
- 如何在 phpunit 请求标头中设置内容类型仍未得到解答
非常感谢