vue.js - Vue 组合 API 计算属性测试

标签 vue.js vue-test-utils

我开始在新的 Vue 项目中使用组合 API,并开始使用 TDD 进行开发。此外,我开始使用 TypeScript。

我创建了一个非常简单的组件 Logo.vue

<template>
  <div>
    <div class="c-logo__fullname">{{ fullName }}</div>
  </div>
</template>

<script lang="ts">
import { defineComponent, computed } from '@vue/composition-api'

interface User {
  firstName: string
  lastName: number
}

export default defineComponent({
  props: {
    user: {
      type: Object as () => User,
      required: true,
    },
  },

  setup({ user }) {
    const fullName = computed(() => `${user.firstName} ${user.lastName}`)

    return {
      fullName,
    }
  },
})
</script>

现在我开始在 Logo.spec.js 文件中测试非常基本的东西

import { mount } from '@vue/test-utils'
import Logo from '@/components/Logo.vue'

let wrapper = null

const user = {
  firstName: 'Test',
  lastName: 'User',
}

beforeEach(() => {
  wrapper = mount(Logo, {
    propsData: {
      user,
    },
  })
})

afterEach(() => {
  wrapper.destroy()
})

describe('Logo', () => {
  test('is a Vue instance', () => {
    expect(wrapper.vm).toBeTruthy()
  })

  test('User has firstname "Test"', () => {
    expect(wrapper.props().user.firstName).toBe('Test')
  })

  test('User has lastname "User"', () => {
    expect(wrapper.props().user.lastName).toBe('User')
  })

  test('User has fullname "Test User"', () => {
    expect(wrapper.find('.c-logo__fullname').text()).toBe('Test User')
  })
})

我现在的问题是,我的计算属性 fullName 的输出测试每次都失败。

FAIL  test/Logo.spec.js
  Logo
    ✓ is a Vue instance (11 ms)
    ✓ User has firstname "Test" (2 ms)
    ✓ User has lastname "User" (2 ms)
    ✕ User has fullname "Test User" (7 ms)

  ● Logo › User has fullname "Test User"

    expect(received).toBe(expected) // Object.is equality

    Expected: "Test User"
    Received: ""

      35 | 
      36 |   test('User has fullname "Test User"', () => {
    > 37 |     expect(wrapper.find('.c-logo__fullname').text()).toBe('Test User')
         |                                                      ^
      38 |   })
      39 | })
      40 | 

      at Object.<anonymous> (test/Logo.spec.js:37:54)

此外,当我制作 console.log(wrapper.html()) 时,我只得到一个空的 div 容器。为什么?

我按照一些文章从 TDD 和 Vue 以及组合 API 开始,但我现在尝试了很多场景,但没有通过计算属性的测试。

我很高兴你能给我一点小帮助,让我度过美好的一天。

最佳答案

我遇到了同样的问题。看起来您需要在测试中包含组合 API,然后将其附加到 vue 实例:

import CompositionApi from '@vue/composition-api'

const localVue = createLocalVue()

beforeEach(() => {
  localVue.use(CompositionApi)
})

如此处所述Vue composition API computed property test

关于vue.js - Vue 组合 API 计算属性测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62871952/

相关文章:

vue.js - vue js 转换不适用于 v-if 条件

vue.js - 将对象作为 prop 传递并将嵌套表单值与 Vuetify 文本字段同步

javascript - Vue.js 在每个页面上重置索引和长度

javascript - 我应该如何正确触发更改事件以在单元测试中触发函数?

javascript - Vue-test-utils:在单个测试中多次使用 $nextTick

vue.js - Vue 单元测试 - 无法读取未定义的属性 't'

javascript - Vue JS 计算属性不重新计算

unit-testing - 在单元测试中触发 vue-select 下拉项选择

testing - 在 vuetify 单元测试中让(模拟的)过渡在 v-menu 内尽快完成

vue.js - 如何在 Nuxt 中重定向验证路由?