laravel - 无法使用 assertSet 测试 laravel livewire 模型隐藏属性
问题描述
我有一个简单的 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 页面上打开了一个问题。
解决方案
推荐阅读
- .net - 从解决方案中的另一个项目启动二进制文件
- javascript - DocuSugn eSignature API 是否支持在 HTML 文档中嵌入地图?
- c++ - 为什么我们在 C++20 中需要 auto after function 概念参数?
- python - 使用model.predict()后如何理解结果数组的维度
- javascript - 覆盖内置 Crud 方法:无法读取未定义的属性“应用”
- azure-cosmosdb - Cosmos DB 本地模拟器 - 模拟的 RU 是什么?
- python - 如何解决意外的 pyinstaller 异常“找不到 pyqt5_plugins 分发”?
- tsql - SQL Server CTE 和递归示例误区
- android-layout - OutOfMemoryError 分配 xxxxx 字节分配失败
- python - 尝试从另一个处理程序函数访问烧瓶会话数据时出现关键错误