首页 > 解决方案 > 使用黄昏测试 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 测试,所以我错过了什么不能以这种方式测试这些表单?

标签: laravel-8laravel-livewirelaravel-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')

推荐阅读