mirror of
https://gitee.com/baidu/amis.git
synced 2024-12-02 12:08:13 +08:00
270 lines
5.9 KiB
TypeScript
270 lines
5.9 KiB
TypeScript
/**
|
||
* 组件名称:Steps 步骤条
|
||
* 单测内容:
|
||
1. 基础使用
|
||
2. 自定义状态 status
|
||
3. 标签位置 labelPlacement
|
||
4. 点状步骤条 progressDot
|
||
5. 竖向排列 mode vertical
|
||
6. 上下文数据 name
|
||
*/
|
||
|
||
import React from 'react';
|
||
import {fireEvent, render, waitFor} from '@testing-library/react';
|
||
import '../../src';
|
||
import {render as amisRender} from '../../src';
|
||
import {makeEnv, wait} from '../helper';
|
||
|
||
test('Renderer:steps', () => {
|
||
const schema = {
|
||
type: 'steps',
|
||
value: 1,
|
||
steps: [
|
||
{
|
||
title: 'First',
|
||
subTitle: 'this is subTitle',
|
||
description: 'this is description',
|
||
icon: 'close',
|
||
className: 'className',
|
||
value: 1
|
||
},
|
||
{
|
||
title: 'Second'
|
||
},
|
||
{
|
||
title: 'Last'
|
||
}
|
||
]
|
||
};
|
||
const {container, rerender} = render(amisRender(schema, {}, makeEnv({})));
|
||
expect(container).toMatchSnapshot();
|
||
|
||
schema.steps[0].value = undefined;
|
||
schema.steps[1].value = 1;
|
||
rerender(amisRender(schema, {}, makeEnv({})));
|
||
expect(container).toMatchSnapshot();
|
||
});
|
||
|
||
test('Renderer:steps status', async () => {
|
||
const {container} = render(
|
||
amisRender(
|
||
{
|
||
type: 'steps',
|
||
className: 'className',
|
||
status: {
|
||
a: 'finish',
|
||
b: 'error',
|
||
c: 'wait'
|
||
},
|
||
steps: [
|
||
{
|
||
title: 'First',
|
||
value: 'a'
|
||
},
|
||
{
|
||
title: 'Second',
|
||
subTitle: 'this is subTitle',
|
||
description: 'this is description',
|
||
value: 'b'
|
||
},
|
||
{
|
||
title: 'Third',
|
||
value: 'c'
|
||
}
|
||
]
|
||
},
|
||
{},
|
||
makeEnv()
|
||
)
|
||
);
|
||
|
||
const steps = container.querySelectorAll('.cxd-Steps .cxd-StepsItem');
|
||
expect(steps!.length).toBe(3);
|
||
expect(steps[0]).toHaveClass('is-finish');
|
||
expect(steps[1]).toHaveClass('is-error');
|
||
expect(steps[2]).toHaveClass('is-wait');
|
||
|
||
expect(container).toMatchSnapshot();
|
||
});
|
||
|
||
test('Renderer:steps labelPlacement', async () => {
|
||
const {container} = render(
|
||
amisRender(
|
||
{
|
||
type: 'steps',
|
||
labelPlacement: 'vertical',
|
||
className: 'className',
|
||
steps: [
|
||
{
|
||
title: 'First',
|
||
value: 'a'
|
||
},
|
||
{
|
||
title: 'Second',
|
||
subTitle: 'this is subTitle',
|
||
description: 'this is description',
|
||
value: 'b'
|
||
},
|
||
{
|
||
title: 'Third',
|
||
value: 'c'
|
||
}
|
||
]
|
||
},
|
||
{},
|
||
makeEnv()
|
||
)
|
||
);
|
||
|
||
expect(container.querySelector('.cxd-Steps')).toHaveClass(
|
||
'cxd-Steps--Placement-vertical'
|
||
);
|
||
expect(container).toMatchSnapshot();
|
||
});
|
||
|
||
test('Renderer:steps progressDot', async () => {
|
||
const {container} = render(
|
||
amisRender(
|
||
{
|
||
type: 'steps',
|
||
className: 'className',
|
||
progressDot: true,
|
||
steps: [
|
||
{
|
||
title: 'First',
|
||
value: 'a'
|
||
},
|
||
{
|
||
title: 'Second',
|
||
subTitle: 'this is subTitle',
|
||
description: 'this is description',
|
||
value: 'b'
|
||
},
|
||
{
|
||
title: 'Third',
|
||
value: 'c'
|
||
}
|
||
]
|
||
},
|
||
{},
|
||
makeEnv()
|
||
)
|
||
);
|
||
expect(container.querySelector('.cxd-Steps')).toHaveClass(
|
||
'cxd-Steps--ProgressDot'
|
||
);
|
||
expect(container).toMatchSnapshot();
|
||
});
|
||
|
||
test('Renderer:steps with vertical mode', async () => {
|
||
const {container} = render(
|
||
amisRender({
|
||
type: 'steps',
|
||
className: 'className',
|
||
progressDot: true,
|
||
mode: 'vertical',
|
||
steps: [
|
||
{
|
||
title: 'First',
|
||
value: 'a'
|
||
},
|
||
{
|
||
title: 'Second',
|
||
subTitle: 'this is subTitle',
|
||
description: 'this is description',
|
||
value: 'b'
|
||
},
|
||
{
|
||
title: 'Third',
|
||
value: 'c'
|
||
}
|
||
]
|
||
})
|
||
);
|
||
|
||
expect(container.querySelector('.cxd-Steps')).toHaveClass(
|
||
'cxd-Steps--vertical'
|
||
);
|
||
expect(container).toMatchSnapshot();
|
||
});
|
||
|
||
test('Renderer:steps with name', async () => {
|
||
const {container} = render(
|
||
amisRender({
|
||
type: 'page',
|
||
data: {
|
||
step: 0,
|
||
status: 'error',
|
||
secondTitle: 'Second Test',
|
||
desc: 'very good idea',
|
||
what: 'what is this'
|
||
},
|
||
body: [
|
||
{
|
||
type: 'input-number',
|
||
name: 'step'
|
||
},
|
||
{
|
||
type: 'steps',
|
||
name: 'step',
|
||
status: '${status}',
|
||
steps: [
|
||
{
|
||
title: 'First',
|
||
subTitle: 'this is subTitle',
|
||
description: '${desc}'
|
||
},
|
||
{
|
||
title: '${secondTitle}'
|
||
},
|
||
{
|
||
title: 'Last',
|
||
subTitle: '${what}'
|
||
}
|
||
]
|
||
}
|
||
]
|
||
})
|
||
);
|
||
|
||
const input = container.querySelector('.cxd-Number input');
|
||
const setNum = async (num: number = 0) => {
|
||
fireEvent.change(input!, {
|
||
target: {value: num}
|
||
});
|
||
await wait(300);
|
||
};
|
||
|
||
const steps = container.querySelectorAll('.cxd-Steps .cxd-StepsItem');
|
||
expect(steps!.length).toBe(3);
|
||
|
||
expect(steps[0]).toHaveClass('is-error');
|
||
expect(
|
||
steps[0].querySelector('.cxd-StepsItem-description')
|
||
).toHaveTextContent('very good idea');
|
||
|
||
await setNum(1);
|
||
expect(steps[0]).toHaveClass('is-finish');
|
||
expect(steps[1]).toHaveClass('is-error');
|
||
expect(steps[2]).toHaveClass('is-wait');
|
||
|
||
expect(steps[1].querySelector('.cxd-StepsItem-title')).toHaveTextContent(
|
||
'Second Test'
|
||
);
|
||
|
||
await setNum(2);
|
||
expect(steps[0]).toHaveClass('is-finish');
|
||
expect(steps[1]).toHaveClass('is-finish');
|
||
expect(steps[2]).toHaveClass('is-error');
|
||
|
||
expect(steps[2].querySelector('.cxd-StepsItem-subTitle')).toHaveTextContent(
|
||
'what is this'
|
||
);
|
||
|
||
await setNum(3);
|
||
|
||
expect(steps[0]).toHaveClass('is-finish');
|
||
expect(steps[1]).toHaveClass('is-finish');
|
||
expect(steps[2]).toHaveClass('is-finish');
|
||
});
|