Vue 自动化测试
发布于 2025-05-04依赖包
经笔者验证、确定支持运行的精确版本,理论上应该支持更多的版本运行。
包名 | 版本号 |
---|---|
node | v22.15.0 |
typescript | ~5.8.2 |
vue | ^3.5.13 |
vitest | ^3.0.9 |
@vue/test-utils | ^2.4.6 |
@testing-library/user-event | ^14.6.1 |
@testing-library/vue | ^8.1.0 |
测试场景
组件类名状态测试
Switch
<template>
<div class="switch" :class="{ checked }" @click="$emit('update:modelValue', !checked)">
<div class="dot"></div>
</div>
</template>
<script lang='ts' setup>
import { defineModel } from 'vue'
const checked = defineModel<boolean>('modelValue', { default: false })
</script>
测试用例
import { describe, it, expect } from 'vitest'
import { mount } from '@vue/test-utils'
import userEvent from '@testing-library/user-event'
import { waitFor } from '@testing-library/vue'
import Switch from './Switch.vue'
/**
* @vitest-environment jsdom
*/
describe('should toggle switch correctly', async () => {
const wrapper = mount(Switch, {
props: {
modelValue: false,
},
attrs: {
'onUpdate:modelValue': (value: boolean) => wrapper.setProps({ modelValue: value }),
},
})
const radioContainer = wrapper.find('.switch')
it('Default status', (a) => {
expect(radioContainer.classes()).not.toContain('checked')
})
it('Open Switch', async () => {
await userEvent.click(radioContainer.element)
await waitFor(() => {
expect(wrapper.find('.switch').classes()).toContain('checked')
})
})
it('Close Switch', async () => {
await userEvent.click(radioContainer.element)
await waitFor(() => {
expect(radioContainer.classes()).not.toContain('checked')
})
})
})