material_manage_system/frontend/src/views/Outbound.test.js
2026-09-20 14:29:41 +08:00

51 lines
2.1 KiB
JavaScript

import { flushPromises, mount } from '@vue/test-utils'
import ElementPlus, { ElMessage } from 'element-plus'
import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest'
import Outbound from './Outbound.vue'
const outboundStore = vi.hoisted(() => ({
outboundList: [], loading: false, page: { currentPage: 1, pageSize: 20, total: 0 },
fetchOutboundList: vi.fn(), fetchOutboundDetail: vi.fn(), createOutbound: vi.fn(), updateOutbound: vi.fn(), deleteOutbound: vi.fn()
}))
const materialsStore = vi.hoisted(() => ({ materialOptions: [], fetchMaterialOptions: vi.fn() }))
const stockStore = vi.hoisted(() => ({ stockList: [], fetchAllStock: vi.fn(), fetchStockByMaterialId: vi.fn() }))
vi.mock('../stores/outbound', () => ({ useOutboundStore: () => outboundStore }))
vi.mock('../stores/materials', () => ({ useMaterialsStore: () => materialsStore }))
vi.mock('../stores/stock', () => ({ useStockStore: () => stockStore }))
vi.mock('../stores/auth', () => ({ useAuthStore: () => ({ isAdmin: true }) }))
function mountOutbound() {
return mount(Outbound, {
global: {
plugins: [ElementPlus],
stubs: {
teleport: true,
ElSelect: { props: ['modelValue'], template: '<div><slot /></div>' },
ElOption: { props: ['label', 'value', 'disabled'], template: '<span>{{ label }}</span>' }
}
}
})
}
describe('出库单表单必填校验', () => {
beforeEach(() => {
vi.clearAllMocks()
})
afterEach(() => vi.restoreAllMocks())
test('未填写接收方时提示友好信息且不发送请求', async () => {
const warning = vi.spyOn(ElMessage, 'warning').mockImplementation(() => {})
const wrapper = mountOutbound()
await flushPromises()
await wrapper.findAll('button').find(button => button.text().includes('新增出库单')).trigger('click')
await flushPromises()
await wrapper.findAll('button').find(button => button.text().includes('保存')).trigger('click')
await flushPromises()
expect(warning).toHaveBeenCalledWith('请输入接收方')
expect(outboundStore.createOutbound).not.toHaveBeenCalled()
wrapper.unmount()
})
})