如何模拟 this.$refs.form.resetValidation()?

Posted

技术标签:

【中文标题】如何模拟 this.$refs.form.resetValidation()?【英文标题】:how to mock this.$refs.form.resetValidation()? 【发布时间】:2020-03-08 02:18:58 【问题描述】:

component1.vue

 <template>
    <div>
        <v-form
        ref="form">
            <v-text-field
                v-model="name"
                :counter="10"
                :rules="nameRules"
                label="Name"
                required
            ></v-text-field>
        </v-form>
    </div>
</template>

<script>
  export default 
    data: () => (
      name: 'Test',
      nameRules: [
        v => !!v || 'Name is required',
        v => (v && v.length <= 10) || 'Name must be less than 10 characters',
      ]
    ),

    mounted() 
        this.$refs.form.resetValidation();
    
  
</script>

test.spec.js

import  shallowMount, mount, createLocalVue  from '@vue/test-utils'
import Vuex from "vuex"
import Vuetify from 'vuetify'
import component1 from '@/components/component1.vue'

const localVue = createLocalVue()
localVue.use(Vuex)
localVue.use(Vuetify)
const vuetify = new Vuetify()

test('test1', () => 
    const wrapper = shallowMount(component1, 
        localVue,
        vuetify
    )
    expect(3).toBe(3);
)

错误 - TypeError: this.$refs.form.resetValidation 不是函数

如果我使用 mount 而不是 shallowMount,测试将通过。但我想知道如何模拟 $ref.form.resetValidation。

【问题讨论】:

尝试将其包装在一个函数中 【参考方案1】:

您可以创建一个手动存根来替换原本用于 v-form 的存根:

test('test1', () => 
  const wrapper = shallowMount(component1, 
    localVue,
    stubs: 
      VForm: 
        render: () => ,
        methods: 
          resetValidation: () => ()
        
      
   
)
....

)

【讨论】:

以上是关于如何模拟 this.$refs.form.resetValidation()?的主要内容,如果未能解决你的问题,请参考以下文章

JS 模拟类的内部如何才能调用自身方法

笑话:如何模拟一个类的一个特定方法

如何在Laravel测试中模拟类的属性

如何模拟应用程序上下文

如何使用 jest 模拟私有变量

如何使用 jest.fn() 模拟属性