首页 > 解决方案 > 无法使用 assertSet 测试 laravel livewire 模型隐藏属性

问题描述

我有一个简单的 LIvewire 组件,其中包含一个用于创建新用户的表单,并且它可以工作,我可以知道,因为在项目已经进入阶段后我被要求编写测试。

Livewire 组件在持久化之前使用一个new User实例(非持久化,即user->existsis false)来存储插入的数据,并且模型通过受保护的数组user隐藏密码属性。$hidden

现在,我可以在本地环境中通过表单页面成功创建新用户,但是在测试时,它给了我错误。

考试

Livewire::test(
        FormComponent::class,
    )
    ->set('user.name', 'user name')
    ->set('user.email', 'user@email.com')
    ->set('user.password', 'password')
    ->assertSet('user.name', 'user name')
    ->assertSet('user.email', 'user@email.com')
    ->assertSet('user.password', 'password');

错误

Failed asserting that null matches expected 'password'.

我发现了什么

通过表单页面设置我的组件用户实例很好,因为livewire将它识别为a model,所以做类似的事情user->password = 'password',而当从测试中设置它时,set()它使用访问运算符访问它的属性,因为它是一个数组,即:user['password] = 'password'
注释掉$hidden数组中的密码条目使测试通过。这将解释属性设置的差异。

结论

由于该$hidden数组旨在在其数组/json 表示中隐藏模型属性,因此它不应该干扰自动化测试,而且在使用 Livewire 自己的方法时,所以对我来说这看起来像一个 LIvewire 错误。

帮助

有没有人遇到过这个错误?

更新#1

为此,我在 Livewire github 页面上打开了一个问题。

标签: laraveltestinghiddenlaravel-livewirelaravel-models

解决方案


推荐阅读