首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vue公式不看错误的单元检验

Vue公式不看错误的单元检验
EN

Stack Overflow用户
提问于 2021-01-10 11:35:25
回答 1查看 561关注 0票数 0

我开始在Vue中使用Jest和Vue- testing测试组件。我正在使用Vue公式来管理表单字段,它在浏览器中按照预期工作。根据文档,我正在“本地Vue”测试实例中导入插件。

但是,下面的断言在测试中找不到文本时失败,而它在浏览器中工作。我做错了什么?我尝试过多种选择器,包括wrapper.text(),但都没有成功。

组件:

代码语言:javascript
复制
<template>
<div class="card">
    <FormulateForm v-model="formValues">
        <FormulateInput type="text" label="Full Name" name="name" validation="required"/>
    </FormulateForm>
</div>
</template>

<script>
export default {
name: "RegistrationFormComponent",

data: function(){
    return {
        'formValues' : {},
    }
}
</script>

测试

代码语言:javascript
复制
import { mount, createLocalVue } from '@vue/test-utils';
import VueFormulate from '@braid/vue-formulate';
import registrationForm from '../../resources/js/components/RegistrationFormComponent'

test('name field is required', async () => {
    const localVue = createLocalVue();
    localVue.use(VueFormulate);
    let wrapper = mount(registrationForm,{localVue});

    let form = wrapper.find('form');
    let field = form.find('input[name=name]');

    await field.setValue('');
    expect(wrapper.find('.formulate-input-error').text()).toContain('Name is required');
})

Jest输出:

代码语言:javascript
复制
 FAIL  tests/Vue/registrationForm.test.js
  ● email must be a valid email address

    [vue-test-utils]: find did not return .formulate-input-error, cannot call text() on empty Wrapper

      12 | 
      13 |     await field.setValue('Dog');
    > 14 |     expect(wrapper.find('.formulate-input-error').text()).toContain('a valid email');
         |                                                   ^
      15 | })
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-11 00:42:05

  1. 如果要检查错误,则需要输入上的error-visibility“活动”,或者需要模拟模糊事件(在本例中,这几乎肯定是问题所在)。
  2. 因为观察者参与了Vue的内部结构,所以在国家“解决”之前,你经常需要“刷新”所有的承诺。您可以通过安装flush-promises模块来做到这一点。
代码语言:javascript
复制
npm install -D flush-promises

然后将其导入您的测试文件中,并在检查您的最终状态之前等待flushPromises()

代码语言:javascript
复制
import flushPromises from 'flush-promises'
import { mount, createLocalVue } from '@vue/test-utils';
import VueFormulate from '@braid/vue-formulate';
import registrationForm from '../../resources/js/components/RegistrationFormComponent'

test('name field is required', async () => {
    const localVue = createLocalVue();
    localVue.use(VueFormulate);
    let wrapper = mount(registrationForm,{localVue});

    let form = wrapper.find('form');
    let field = form.find('input[name=name]');

    field.setValue('');
    field.trigger('blur');
    await flushPromises()
    expect(wrapper.find('.formulate-input-error').text()).toContain('Name is required');
})

全面披露:我是VueFormulate的作者

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65652838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档