优化
This commit is contained in:
@@ -23,8 +23,6 @@ vi.mock('../api/relabelOrders', () => ({
|
||||
|
||||
class ResizeObserverStub implements ResizeObserver { observe() {} unobserve() {} disconnect() {} }
|
||||
function memoryStorage(): Storage { const values = new Map<string, string>(); return { get length() { return values.size }, clear: () => values.clear(), getItem: (key) => values.get(key) ?? null, key: (index) => [...values.keys()][index] ?? null, removeItem: (key) => values.delete(key), setItem: (key, value) => values.set(key, value) } }
|
||||
function deferred<T>() { let resolve!: (value: T) => void; const promise = new Promise<T>((done) => { resolve = done }); return { promise, resolve } }
|
||||
|
||||
function formItem(wrapper: VueWrapper<any>, label: string) {
|
||||
const item = wrapper.findAllComponents({ name: 'ElFormItem' }).find((candidate) => candidate.props('label') === label)
|
||||
if (!item) throw new Error(`Missing form item: ${label}`)
|
||||
@@ -51,10 +49,8 @@ describe('RelabelOrdersView', () => {
|
||||
vi.mocked(changeRelabelOrderStatus).mockReset()
|
||||
})
|
||||
|
||||
it('keeps only the latest selected customer warehouse response', async () => {
|
||||
const first = deferred<Awaited<ReturnType<typeof listRelabelWarehouseOptions>>>()
|
||||
const second = deferred<Awaited<ReturnType<typeof listRelabelWarehouseOptions>>>()
|
||||
vi.mocked(listRelabelWarehouseOptions).mockReturnValueOnce(first.promise).mockReturnValueOnce(second.promise)
|
||||
it('loads shared receiving warehouse options independently from the selected customer', async () => {
|
||||
vi.mocked(listRelabelWarehouseOptions).mockResolvedValue({ records: [{ id: 'WH-B', customerId: '0', warehouseCode: 'B', warehouseName: 'B仓', warehouseType: 'OVERSEAS', status: 'ACTIVE' }], page: 1, size: 200, total: 1, pages: 1 })
|
||||
const wrapper = mount(RelabelOrdersView, { attachTo: document.body, global: { plugins: [ElementPlus] } })
|
||||
await flushPromises()
|
||||
await wrapper.findAll('button').find((button) => button.text().includes('新增换标单'))!.trigger('click')
|
||||
@@ -63,17 +59,10 @@ describe('RelabelOrdersView', () => {
|
||||
const customer = select(wrapper, '请选择 ACTIVE 客户')
|
||||
customer.vm.$emit('update:modelValue', '10001'); customer.vm.$emit('change', '10001')
|
||||
await flushPromises()
|
||||
customer.vm.$emit('update:modelValue', '10002'); customer.vm.$emit('change', '10002')
|
||||
await flushPromises()
|
||||
|
||||
second.resolve({ records: [{ id: 'WH-B', customerId: '10002', warehouseCode: 'B', warehouseName: 'B仓', warehouseType: 'OVERSEAS', status: 'ACTIVE' }], page: 1, size: 200, total: 1, pages: 1 })
|
||||
await flushPromises()
|
||||
first.resolve({ records: [{ id: 'WH-A', customerId: '10001', warehouseCode: 'A', warehouseName: 'A仓', warehouseType: 'OVERSEAS', status: 'ACTIVE' }], page: 1, size: 200, total: 1, pages: 1 })
|
||||
await flushPromises()
|
||||
|
||||
const labels = wrapper.findAllComponents({ name: 'ElOption' }).map((option) => option.props('label'))
|
||||
expect(listRelabelWarehouseOptions).toHaveBeenCalledOnce()
|
||||
expect(labels).toContain('B仓 · B')
|
||||
expect(labels).not.toContain('A仓 · A')
|
||||
})
|
||||
|
||||
it('reuses one idempotency key after a failed create retry', async () => {
|
||||
@@ -87,7 +76,7 @@ describe('RelabelOrdersView', () => {
|
||||
const customer = select(wrapper, '请选择 ACTIVE 客户')
|
||||
customer.vm.$emit('update:modelValue', '10001'); customer.vm.$emit('change', '10001')
|
||||
await flushPromises()
|
||||
const warehouse = select(wrapper, '请先选择客户,再选择其海外仓')
|
||||
const warehouse = select(wrapper, '请选择 ACTIVE+RECEIVING 海外仓')
|
||||
warehouse.vm.$emit('update:modelValue', 'WH-1')
|
||||
formItem(wrapper, '关联订单').findComponent({ name: 'ElInput' }).vm.$emit('update:modelValue', 'CO-1')
|
||||
formItem(wrapper, '商品SKU').findComponent({ name: 'ElInput' }).vm.$emit('update:modelValue', 'SKU-1')
|
||||
|
||||
Reference in New Issue
Block a user