我最近从laravel 5.2搬到了laravel 5.4。在5.2中,所有的测试用例都运行良好。升级到新版本后,我面临着测试用例的问题。下面是我在5.2中正常工作的示例代码。
$params = [
'id' => 'asddsdsd'
];
$response1 = $this->call('GET', '/user/getInfo', $params);
$this->assertArrayHasKey('status', $response1);
$this->assertTrue($response1['status'] == 400);
$params2 = [
'id' => '23'
];
$response2 = $this->call('GET', '/user/getInfo', $params2);
$this->assertArrayHasKey('status', $response2);
$this->assertTrue($response2['status'] == 200);
laravel 5.2中的曾经都有单独的反应,在第一种情况下,我曾经得到失败反应和第二种情况,我得到了成功回应。
升级到5.4后,我对两个测试用例的响应相同。基本上,由于调用相同的URl,第一个调用响应被复制到第二个响应。这种情况发生在所有的测试用例中。
注意:我在不同方法中添加了第二个案例,但仍面临同样的问题
有谁能建议我如何解决这个问题?
答案 0 :(得分:0)
看起来call()
方法返回Response
object in 5.2,但TestResponse
object in 5.4。要使您的代码在5.4中具有可比性,您可以尝试使用baseResponse
对象的TestResponse
属性:
$this->assertArrayHasKey('status', $response1->baseResponse);
您可能还需要将2个请求分成单独的模块化测试用例,然后使用@depends
注释将它们链接起来。
public function testRequest1()
{
$params = [
'id' => 'asddsdsd'
];
$response1 = $this->call('GET', '/user/getInfo', $params);
//$this->assertWhatever()
return $dataIfYouWantIt
}
/**
* @depends testRequest1
*/
public function testRequest2($dataIfYouWantIt)
{
$params2 = [
'id' => '23'
];
$response2 = $this->call('GET', '/user/getInfo', $params2);
//$this->assertWhatever()
}