Vue тест вычисленных свойств композиции API - PullRequest
1 голос
/ 13 июля 2020

Я начинаю использовать API композиции в новом проекте Vue и начинаю разработку с 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>

И теперь я начинаю тестировать самые базовые c вещи в 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 композиции, но сейчас я попробовал множество сценариев ios, не пройдя тест для вычисляемого свойства.

Я рад любой маленькой помощи, которую вы можете мне оказать и спасти мне день.

1 Ответ

0 голосов
/ 30 июля 2020

У меня была такая же проблема. Похоже, вам нужно включить API композиции в тест, а затем присоединить его к экземпляру vue:

import CompositionApi from '@vue/composition-api'

const localVue = createLocalVue()

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

Как описано здесь Vue тест вычисленных свойств API композиции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...