phpunit为具有不同参数的多个调用提供相同的响应

时间:2018-01-16 06:58:09

标签: php laravel phpunit laravel-5.2 laravel-5.4

我最近从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,第一个调用响应被复制到第二个响应。这种情况发生在所有的测试用例中。

注意:我在不同方法中添加了第二个案例,但仍面临同样的问题

有谁能建议我如何解决这个问题?

1 个答案:

答案 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()
}