import { afterEach, describe, expect, it } from 'vitest'; import { mount } from '@vue/test-utils'; import TransForm from '../src/TransForm.vue'; import { resetConfig, setConfig } from '../src/config.js'; // 每个用例后恢复全局配置,避免 setConfig 污染其它用例 afterEach(() => { resetConfig(); }); describe('TransForm 操作符下拉(默认 query-option)', () => { it('无 query-option 的字段渲染默认操作符列表(12 项,第一项 EQ)', () => { const wrapper = mount(TransForm, { props: { schema: [{ row: 12, field: 'name', 'field-name': '名称' }] }, }); const opts = wrapper.find('select').findAll('option'); expect(opts).toHaveLength(12); expect(opts[0].text()).toBe('='); expect(opts[0].attributes('value')).toBe('EQ'); expect(opts[11].text()).toBe('IS NOT NULL'); }); it('有 query-option 的字段仍渲染 schema 自己的选项(不被默认覆盖)', () => { const wrapper = mount(TransForm, { props: { schema: [ { row: 12, field: 'status', 'field-name': '状态', 'query-option': [{ value: 'NE', label: '≠' }], }, ], }, }); const opts = wrapper.find('select').findAll('option'); expect(opts).toHaveLength(1); expect(opts[0].text()).toBe('≠'); expect(opts[0].attributes('value')).toBe('NE'); }); it('setConfig 自定义 queryOption 后,无 query-option 字段的下拉随之更新', () => { setConfig({ queryOption: [{ value: 'GT', label: '>' }] }); const wrapper = mount(TransForm, { props: { schema: [{ row: 12, field: 'age', 'field-name': '年龄' }] }, }); const opts = wrapper.find('select').findAll('option'); expect(opts).toHaveLength(1); expect(opts[0].text()).toBe('>'); }); it('有 query-component 但无 query-option 的字段不套默认下拉(操作符由组件自己管理)', () => { const wrapper = mount(TransForm, { props: { schema: [{ row: 12, field: 'custom', 'query-component': 'CustomQuery' }], }, }); expect(wrapper.find('select').findAll('option')).toHaveLength(0); }); });