Laravel - 测试 - assertJsonMissingExact
Posted
技术标签:
【中文标题】Laravel - 测试 - assertJsonMissingExact【英文标题】:Laravel - Testing - assertJsonMissingExact 【发布时间】:2021-03-31 19:45:58 【问题描述】:我不得不承认这是我第一次使用这种方法
在描述之前,这里是本案例中的 Laravel 和 php 版本。 拉拉维尔:8.15 PHP:7.4.13
我的路线:Route::get('/', function ()
return ['a' => 1, 'b' => 2, 'c' => 3];
当我的测试方法如下时,它失败了,这是我的预期
public function testDemo()
$response = $this->get('/')->assertJsonMissing(['a' => 1, 'b' => 3]);
然后,我使用了 assertJsonMissingExact,我预计它会通过。
public function testDemo()
$response = $this->get('/')->assertJsonMissingExact(['a' => 1, 'b' => 3]);
但是,它没有通过。相反,这里是消息
This test did not perform any assertions
Time: 00:00.178, Memory: 20.00 MB
OK, but incomplete, skipped, or risky tests!
Tests: 1, Assertions: 0, Risky: 1.
Process finished with exit code 0
它说测试没有执行任何断言。我想知道这是否正常?因为我期待passed
结果。
任何人都可以帮助我,我们将不胜感激。
【问题讨论】:
【参考方案1】:对你来说可能为时已晚,但对于下一个想了解这两种方法的人(比如我)来说可能不是。
查看两者的基本实现
照亮/测试/AssertableJsonString::assertMissing() 在简化代码中(省略数组排序)
public function assertMissing(array $data, $exact = false)
$actual = json_encode($actualData);
foreach ($data as $key => $value)
if (Str::contains($actual, $unexpected)
PHPUnit::Fail()
return $this;
照亮/测试/AssertableJsonString::assertMissingExact()
简化代码
public function assertMissing(array $data, $exact = false)
$actual = json_encode($actualData);
foreach ($data as $key => $value)
if (! Str::contains($actual, $unexpected)
return $this;
PHPUnit::Fail()
因此,如果整个数组在实际数据中,则 assertJsonMissing 失败,而如果至少一个键 => 值对在实际数据中,则 assertJsonMissingExact 失败,在您的情况下为 'a' => 1
【讨论】:
以上是关于Laravel - 测试 - assertJsonMissingExact的主要内容,如果未能解决你的问题,请参考以下文章