Laravel TDD assertSee returns NULL 对象为真

Laravel TDD assertSee returns true on NULL object

每当我尝试测试某个不存在的对象 属性(实际上为空)时,使用 $this->assertSee($record->someNonExistingProperty):

时测试通过
public function test_a_user_should_be_able_to_see_a_consumer_address()
{
    $this->get(route('users.index'))->assertSee($this->user->address);
}

$this->user->address不存在,但测试returns绿色

这个说法有什么问题吗?

我的猜测是这样的,它断言它可以看到 nothing/everything。

如果 $this->user->address return null 那么您的断言将等同于:

$this->get(route('users.index'))->assertSee(null);

我也会对您的对象进行断言 属性。像这样:

$this->assertTrue($this->user->address !== null);
$this->get(route('users.index'))->assertSee($this->user->address);

关于 assert see 的文档指出它查找字符串并将转义它给出的任何值

https://laravel.com/docs/7.x/http-tests#assert-see

解决此问题的方法是使用空合并运算符,例如:

$response ->assertSeeText($this->user->address ?? '**No Address Field**')

这部分 $this->user->address ?? '**No Address Field**' 检查是否有 $this->user->address 如果没有 returns **No Address Field** - 只要您的视图不显示此文本,它就会失败。

所以基本上将 **No Address Field** 的文本更改为您希望在测试结果中看到的内容,以识别丢失的键,但在视图中不存在。