2016-09-16 38 views
1

我正在测试将数据发布到我们使用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', 
    ]; 
} 
} 
+0

$ user = User :: first(); $ this-> actingAs($ user); $这个 - > JSON( 'POST', '/ VI1 /车',[ '活动'=>真实, '让'=> '奥迪' ]) - > assertResponseOk() 尝试把它这样,如果它仍然失败,请检查Inspector中的网络选项卡并查找请求,响应或预览是什么? –

+0

正如我在问题中提到的那样,它在UI应用程序的浏览器中以及Postman中正常工作。因此,网络选项卡和检查员不会在这个问题上发现任何问题。它是PHPUnit测试中的一个问题,参数丢失或未设置导致请求失败验证并返回422(如验证失败时预期的那样) – ExoticChimp

+0

请提供控制器操作代码和该请求的验证规则 –

回答

0

422是验证错误的错误响应..这意味着要么你的数据不张贴或不通过服务器验证,请尝试

$this->json(Request::METHOD_POST, '/v1/cars', [ 
     'active' => true, 
     'make' => 'Audi' 
    ], 
    ['Authorization' => 'Bearer '.\JWT::fromUser($user)]))->dump(); 

dump()应该显示你的错误

+0

错误是在问题中,它似乎没有公布数据,但我不明白为什么 – ExoticChimp