我有一个简单的 LIvewire 组件,其中包含一个用于创建新用户的表单,并且它可以工作,我可以知道,因为在项目已经进入阶段后我被要求编写测试。
Livewire 组件在持久化之前使用一个new User
实例(非持久化,即user->exists
is 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 页面上打开了一个问题。