第一步來新增測試檔案。
src\components\slider-stubborn\slider-stubborn.spec.ts
import { mount } from '@vue/test-utils';
import { test, expect } from 'vitest';
import SliderStubborn from './slider-stubborn.vue';
test('測試案例', () => {
const wrapper = mount(SliderStubborn);
expect(wrapper).toBeDefined();
})
讓我們依序新增各種測試案例吧。∠( ᐛ 」∠)_
import { mount } from '@vue/test-utils';
import { test, expect } from 'vitest';
import SliderStubborn from './slider-stubborn.vue';
test('測試 aria 參數是否有作用', async () => {
const props = {
min: 0,
max: 100,
modelValue: 50,
}
const wrapper = mount(SliderStubborn, {
props,
});
expect(wrapper).toBeDefined();
// 取得 role 為 slider 的元素
const slider = wrapper.find('[role="slider"]');
expect(slider.attributes('aria-valuemin')).toBe(`${props.min}`);
expect(slider.attributes('aria-valuemax')).toBe(`${props.max}`);
expect(slider.attributes('aria-valuenow')).toBe(`${props.modelValue}`);
})
test('可以 disabled 滑動條', async () => {
const wrapper = mount(SliderStubborn);
expect(wrapper).toBeDefined();
// 取得 role 為 slider 的元素
const slider = wrapper.find('[role="slider"]');
expect(slider.attributes('aria-disabled')).toBe(`false`);
await wrapper.setProps({ disabled: true });
expect(slider.attributes('aria-disabled')).toBe(`true`);
})
test('可以客製化 track', async () => {
const trackClass = 'custom-track';
const wrapper = mount(SliderStubborn, {
props: {
modelValue: 50,
trackClass,
}
});
expect(wrapper).toBeDefined();
// 取得 role 為 slider 的元素
const track = wrapper.find(`[role="slider"] > .${trackClass}`);
expect(track).toBeDefined();
})
順利通過!✧*。٩(ˊᗜˋ*)و✧*。
✓ src/components/slider-stubborn/slider-stubborn.spec.ts (3)
✓ 測試 aria 參數是否有作用
✓ 可以 disabled 滑動條
✓ 可以客製化 track
Test Files 1 passed (1)
Tests 3 passed (3)
Start at 21:50:34
Duration 983ms
@vue/test-utils 的模擬環境能測試的內容有限,剩下的複雜互動讓我們留到 e2e 測試,在瀏覽器環境中完整的測試測試吧!( ‧ω‧)ノ╰(‧ω‧ )
以上程式碼已同步至 GitLab,大家可以前往下載: