laravel-8 - 使用黄昏测试 livewire 表单
问题描述
我有一堆 laravel 组件,其中包含很多字段,例如:
public $last_name;
public $middle_name;
public $title;
public $suffix;
public $home_email;
我让它们都绑定到这样的输入:
<input type="text" name="first_name" wire:model.lazy="first_name" />
我正在尝试用 Dusk 进行测试,例如:
public function testCreatePerson()
{
$this->browse(function (Browser $browser) {
$browser->loginAs(User::find(1))
->visit('/person/create')
->type('first_name','Test')
//...
但我不断收到失败的测试,因为字段将随机为空。我认为这与 livewire 绑定时间有关。我尝试添加不同长度的暂停,它们有时会起作用,但并非总是如此。为什么会发生这种情况以及解决方案是什么。Dusk 和 Livewire 都是 Laravel 社区的发展方式,而 Livewire 自己的测试据说是 Dusk 测试,所以我错过了什么不能以这种方式测试这些表单?
解决方案
我知道这我有点老了,但这是我的看法,我希望它可以帮助其他人。
我自己也有类似的问题。我认为你是对的,它与 livewire 绑定有关。我通过使用typeSlowly而不是type来修复我的问题。
我的问题是,在将值提交到保存方法之前,输入字段还没有完全完成更新 livewire 组件中的属性。
如果 typeSlowly 不起作用,您可能还需要在提交表单中的任何内容之前暂停一下。
黄昏文档: https ://laravel.com/docs/8.x/dusk#typing-values
所以你的代码看起来像这样:
$this->browse(function (Browser $browser) {
$browser->loginAs(User::find(1))
->visit('/person/create')
->typeSlowly('first_name','Test')
推荐阅读
- javascript - 我有错误 Uncaught TypeError: Cannot read property 'toLowerCase' of undefined
- javascript - 使用javascript出现下载对话框弹出后如何自动关闭非活动选项卡(在后台)?(除了setTimeout)
- design-patterns - awk 在模式之间一起打印特定变量和原始数据
- gcc - 使用gcc8.1.1编译gcc6.4.0
- javascript - 从 package-lock.json 获取库
- go - 如何访问平台特定的包文档?
- css - 如何使用 CSS 伪元素使我的 span 看起来像一个箭头?
- python - Python替换部分长网址
- xampp - 安装 GLPI 时不存在 CAS 扩展
- api - API 将数据库链接到 MVC 项目和移动应用 Xamarin