0

我有一个 FileForm.vue 组件:-

<template>
  <div class="file-form">
    <form @submit="submit">
      <input v-model="name" type="text" placeholder="File Name" />
      <button type="submit">
        <i class="fas fa-plus"></i>
      </button>
    </form>
  </div>
</template>

<script>
export default {
  data () {
    return {
      name: ''
    }
  },
  methods: {
    submit () {
      if (!this.name.trim()) {
        return
      }
      this.$emit('submit', this.name)
    }
  }
}
</script>

它包含在 App.vue 组件中:-

<template>
  <div class="main">
      <div class="sidebar">
        <file-form @submit="createFile"></file-form>
        <div class="files-list">

        </div>
      </div>
      <div class="content">
        <editor v-model="content"></editor>
        <renderer :markdown="content"></renderer>
      </div>
  </div>
</template>

现在我正在测试这种行为:-

test('on successfull submit of the FileForm.vue a file object should be pushed to files array of App.vue', () => {
    let appWrapper = mount(App)
    appWrapper.setMethods({
      createFile: jest.fn()
    })
    appWrapper.find('form').trigger('submit')
    expect(appWrapper.vm.createFile).toHaveBeenCalled()
})

它将失败,因为最初 FileForm.vue 的输入为空,因此它是数据名称属性,由于 if 块,它不会触发提交操作。因此模拟的 createFile 没有被调用。

如果我能以某种方式设置数据,在这种情况下是触发提交之前 FileForm.vue 的 name 属性,我的测试将通过。像这样的东西: -

let formWrapper = appWrapper.find('file-form')
formWrapper.setData({
  name: 'New File'
})

但我不能这样做,因为 formWrapper 是 HTMLElement 而不是 Vue 实例。

4

1 回答 1

0

利用

import FileForm from '@/components/FileForm'

let formWrapper = appWrapper.find(FileForm)

formWrapper.setData({
  // your code here
})
于 2018-03-03T14:16:36.507 回答