使用 Jest 在 Vue 上测试表单重置

Testing form reset on Vue with Jest

使用 Jest 测试用 Vue 构建的表单以进行单元测试。在这些元素中,我有一个重置按钮(type=reset),它工作正常,一旦点击它就会删除所有已经引入的值。

但是,在单元测试时,点击按钮似乎并没有清除值。我没有点击处理程序,只是使用表单的默认重置功能。

我也尝试过使用 wrapper.emmited('reset'); 无济于事,wrapper.emmitedByOrder(); returns 一个空数组。

如何测试重置按钮是否正确生成并按预期工作?

test('Assert Form Components', async () => {
 const wrapper = mount(FormElement, {
            propsData: {
                message: sampleJSON.formJSON
            }
        })

let resetBtn = wrapper.find('.form-reset');
let requiredInput = wrapper.find('.required-input');
....
requiredInput.setValue('test');
expect(requiredInput.element).toHaveValue('test'); //This passes

await resetBtn.trigger('click');
expect(requiredInput.element).not.toHaveValue('test') //This fails
....

显然缺少两件事。首先,正如@AlexMA 建议的那样,允许另一个滴答声让 DOM 稳定下来。其次,我需要将包装器附加到 DOM。最终代码如下所示:

test('Assert Form Components', async () => {
 const wrapper = mount(FormElement, {
            propsData: {
                message: sampleJSON.formJSON
            },
            attachTo: document.body
        })

let resetBtn = wrapper.find('.form-reset');
let requiredInput = wrapper.find('.required-input');
....
requiredInput.setValue('test');
expect(requiredInput.element).toHaveValue('test'); //This passes

await resetBtn.trigger('click');
await wrapper.vm.$nextTick()
expect(requiredInput.element).not.toHaveValue('test') //This works now!
....