mirror of
https://gitee.com/baidu/amis.git
synced 2024-12-05 05:28:37 +08:00
d4c931cb85
* feat: 表单项校验不再校验全部规则,改为顺序校验模式; 自定义校验 addRule 增加灵活展示错误信息特性。 * doc: 表单项校验不再校验全部规则,改为顺序校验模式 * doc: 自定义校验 addRule 增加灵活展示错误信息特性 * test: 表单验证规则改为顺序校验,不再全部校验,测试用例变更 --------- Co-authored-by: jinye <jinye@baidu.com>
179 lines
4.5 KiB
TypeScript
179 lines
4.5 KiB
TypeScript
/**
|
|
* 组件名称: InputGroup 输入组合
|
|
* 单测内容:
|
|
* 1. 基础使用
|
|
* 2. 校验配置
|
|
*
|
|
*/
|
|
|
|
import {
|
|
render,
|
|
cleanup,
|
|
fireEvent,
|
|
screen,
|
|
waitFor
|
|
} from '@testing-library/react';
|
|
import '../../../src';
|
|
import {render as amisRender, clearStoresCache} from '../../../src';
|
|
import {makeEnv, wait} from '../../helper';
|
|
|
|
afterEach(() => {
|
|
cleanup();
|
|
clearStoresCache();
|
|
});
|
|
|
|
test('Renderer:InputGroup', async () => {
|
|
const {container} = render(
|
|
amisRender(
|
|
{
|
|
type: 'form',
|
|
api: '/api/xxx',
|
|
controls: [
|
|
{
|
|
type: 'input-group',
|
|
name: 'a',
|
|
label: 'input-group',
|
|
mode: 'horizontal',
|
|
className: 'no-border',
|
|
horizontal: {
|
|
leftFixed: 1,
|
|
left: 4,
|
|
right: 7
|
|
},
|
|
controls: [
|
|
{
|
|
name: 'text',
|
|
type: 'text',
|
|
validation: 'isUrl',
|
|
addOn: {
|
|
label: '按钮',
|
|
type: 'submit'
|
|
}
|
|
},
|
|
{
|
|
name: 'text1',
|
|
type: 'text',
|
|
hidden: true
|
|
}
|
|
]
|
|
}
|
|
],
|
|
title: 'The form',
|
|
actions: []
|
|
},
|
|
{},
|
|
makeEnv({})
|
|
)
|
|
);
|
|
|
|
expect(container).toMatchSnapshot();
|
|
});
|
|
|
|
const setup = (schema = {}, props = {}, env = {}) => {
|
|
const onSubmit = jest.fn();
|
|
const submitBtnText = 'Submit';
|
|
return render(
|
|
amisRender(
|
|
{
|
|
type: 'form',
|
|
api: '/api/mock2/form/saveForm',
|
|
submitText: submitBtnText,
|
|
body: [
|
|
{
|
|
type: 'input-group',
|
|
name: 'input-group',
|
|
label: '输入组合校验',
|
|
body: [
|
|
{
|
|
type: 'input-text',
|
|
name: 'child1',
|
|
label: 'child1',
|
|
validations: {
|
|
isNumeric: true,
|
|
maxLength: 3
|
|
}
|
|
},
|
|
{
|
|
type: 'input-text',
|
|
name: 'child2',
|
|
validations: {
|
|
minLength: 5
|
|
}
|
|
}
|
|
],
|
|
...schema
|
|
}
|
|
]
|
|
},
|
|
{onSubmit, ...props},
|
|
makeEnv({...env})
|
|
)
|
|
);
|
|
};
|
|
|
|
describe('InputGroup with validationConfig', () => {
|
|
test('InputGroup with validationConfig: errorMode', async () => {
|
|
const {container} = setup({validationConfig: {errorMode: 'partial'}});
|
|
const child1 = container.querySelector(
|
|
'input[name=child1]'
|
|
) as HTMLInputElement;
|
|
const child2 = container.querySelector(
|
|
'input[name=child2]'
|
|
) as HTMLInputElement;
|
|
fireEvent.change(child1, {target: {value: 'amis'}});
|
|
await wait(300);
|
|
|
|
const submitBtn = screen.getByRole('button', {name: 'Submit'});
|
|
fireEvent.click(submitBtn);
|
|
await wait(500);
|
|
|
|
expect(
|
|
container.querySelector('*[class*="InputGroup-validation--partial"]')
|
|
).toBeInTheDocument();
|
|
|
|
const errorDom = container.querySelector('*[class*="Form-feedback"]');
|
|
expect(errorDom?.childElementCount).toStrictEqual(1);
|
|
|
|
fireEvent.change(child2, {target: {value: 'amis'}});
|
|
await wait(300);
|
|
|
|
fireEvent.click(submitBtn);
|
|
await wait(500);
|
|
|
|
expect(errorDom?.childElementCount).toStrictEqual(2);
|
|
});
|
|
|
|
// v2.9.1 改为顺序校验后,不会同时输出多条校验错误消息,所以也不会用到分隔符
|
|
// test('InputGroup with validationConfig: delimiter', async () => {
|
|
// const delimiter = '@@';
|
|
// const {container} = setup({validationConfig: {delimiter}});
|
|
// const child1 = container.querySelector(
|
|
// 'input[name=child1]'
|
|
// ) as HTMLInputElement;
|
|
// const child2 = container.querySelector(
|
|
// 'input[name=child2]'
|
|
// ) as HTMLInputElement;
|
|
// fireEvent.change(child1, {target: {value: 'amis'}});
|
|
// await wait(500);
|
|
|
|
// const submitBtn = screen.getByRole('button', {name: 'Submit'});
|
|
// fireEvent.click(submitBtn);
|
|
// await wait(500);
|
|
|
|
// screen.debug(container);
|
|
|
|
// expect(
|
|
// container.querySelector('*[class*="InputGroup-validation--full"]')
|
|
// ).toBeInTheDocument();
|
|
|
|
// const errorDom = container.querySelector('*[class*="Form-feedback"]');
|
|
// expect(errorDom?.childElementCount).toStrictEqual(1);
|
|
|
|
// const child1ErrorText = errorDom?.childNodes[0]
|
|
// ? errorDom.childNodes[0].textContent
|
|
// : '';
|
|
|
|
// expect(child1ErrorText).toEqual(expect.stringMatching(delimiter));
|
|
// });
|
|
});
|