我正在测试将数据发布到我们使用Laravel 5.2创建的API端点,但是没有一个参数似乎在测试中到达应用程序。端点期望json并用json响应,并使用一个FormRequestValidator,它需要规则来激活和创建参数。测试失败,状态码为,并检查响应主体,它声明活动参数是必需的,即使它们在调用中传递,因此出于某种原因,当请求到达表单请求验证器时,输入不在这里。但是,当我使用json正文调用包括make和postman的活动的端点或我们构建的UI应用程序时,它工作正常,但它仅在PHPUnit测试中失败,因此它必须是PHPUnit或测试设置不正确。这里是测试:Laravel 5.2未设置PHPUnit JSON Api请求正文
public function testItStoresCars()
{
// Arrange
$user = User::first();
//Act
$this->json(Request::METHOD_POST, '/v1/cars', [
'active' => true,
'make' => 'Audi'
],
['Authorization' => 'Bearer '.\JWT::fromUser($user)]));
// Assert
$this->assertResponseOk();
}
我知道授权标头设置从其他测试通过正确。
我已经试过禁用中间件,使用$this->post
helper方法和手动设置标头以及使用$this->call
方法与设置页眉和使用json_encode
对数据进行编码,但我总是得到相同的422响应。我想知道有没有人遇到过这个问题,或者可以看到一个错误?
控制器代码
public function store(CreateCarRequest $request)
{
$car = $this->carRepo->save($request->all());
return response()->json(car);
}
FormRequest
class CreateCarRequest extends Request
{
public function rules()
{
return [
'active' => 'required|boolean',
'make' => 'required',
];
}
}
$ user = User :: first(); $ this-> actingAs($ user); $这个 - > JSON( 'POST', '/ VI1 /车',[ '活动'=>真实, '让'=> '奥迪' ]) - > assertResponseOk() 尝试把它这样,如果它仍然失败,请检查Inspector中的网络选项卡并查找请求,响应或预览是什么? –
正如我在问题中提到的那样,它在UI应用程序的浏览器中以及Postman中正常工作。因此,网络选项卡和检查员不会在这个问题上发现任何问题。它是PHPUnit测试中的一个问题,参数丢失或未设置导致请求失败验证并返回422(如验证失败时预期的那样) – ExoticChimp
请提供控制器操作代码和该请求的验证规则 –