如何为phpunit assert设置多个可接受的值

时间:2019-06-10 10:53:25

标签: php laravel phpunit

我在Laravel中使用Phpunit,我的Api有多个可接受的响应。我有2种情况的问题:

1-响应结构可以是以下两种之一:

$response->assertJsonStructure(['cities'=>[]]);  

or

$response->assertJsonStructure(['cities'=>[['id','name']]])

2-响应状态可以为200或302

$response->assertStatus(200);

or

$response->assertStatus(302);

但是我找不到任何方法来“或”这两个条件。

我正在寻找这样的东西:

$response->assertOr(
    $response->assertStatus(200),
    $response->assertStatus(302)
);

2 个答案:

答案 0 :(得分:2)

#1 (如果#1 ),如果您认为该值可能为空,则将键与assertArrayHasKey()

匹配
$response->assertArrayHasKey('cities', $response->getContent()); 

对于#2 ,您可以使用assertContains()


 $response->assertContains($response->getStatusCode(), array(200,302));

在这里您可以找到更多信息。 https://phpunit.readthedocs.io/en/7.4/assertions.html#assertcontains

答案 1 :(得分:1)

在2º的情况下,您可以使用

if($response->getStatusCode() == 410) {
  $response->assertStatus(410);
} else {
  $response->assertStatus(200);
}