chore: Progress 单测补充 (#5973)

This commit is contained in:
sansiro 2022-12-28 17:02:08 +08:00 committed by GitHub
parent 68754ec845
commit 8d0947bf98
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 655 additions and 4 deletions

View File

@ -1,10 +1,23 @@
import React = require('react');
/**
* Progress
*
* 1. 使
* 2. map
* 3. threshold & showThresholdText
* 4.
* 5. & stripe & animate
* 6.
* 7. 线 strokeWidth
* 8. value valueTpl
*/
import React from 'react';
import {render} from '@testing-library/react';
import '../../src';
import {render as amisRender} from '../../src';
import {makeEnv} from '../helper';
import {makeEnv, wait} from '../helper';
test('Renderer:progress', () => {
test('Renderer:Progress', () => {
const {container} = render(
amisRender(
{
@ -17,4 +30,220 @@ test('Renderer:progress', () => {
);
expect(container).toMatchSnapshot();
expect(container).toHaveTextContent('60%');
expect(container.querySelector('.cxd-Progress-line-bar')).toHaveStyle({
width: '60%'
});
});
test('Renderer:Progress with map', async () => {
const {container, rerender} = render(
amisRender({
type: 'progress',
value: 20
})
);
const bar = () => container.querySelector('.cxd-Progress-line-bar')!;
expect(bar()).toHaveClass('bg-danger');
rerender(
amisRender({
type: 'progress',
value: 40
})
);
expect(bar()).toHaveClass('bg-warning');
rerender(
amisRender({
type: 'progress',
value: 60
})
);
expect(bar()).toHaveClass('bg-info');
rerender(
amisRender({
type: 'progress',
value: 80
})
);
expect(bar()).toHaveClass('bg-success');
rerender(
amisRender({
type: 'progress',
value: 60,
map: '#F96D3E'
})
);
expect(container).toMatchSnapshot();
expect(container.querySelector('.cxd-Progress-line-bar')!).toHaveStyle({
'background-color': 'rgb(249, 109, 62)'
});
rerender(
amisRender({
type: 'progress',
value: 29,
map: [
{
value: 30,
color: '#007bff'
},
{
value: 60,
color: '#F96D3E'
}
]
})
);
expect(container.querySelector('.cxd-Progress-line-bar')!).toHaveStyle({
'background-color': 'rgb(0, 123, 255)'
});
});
test('Renderer:Progress with threshold & showThresholdText', async () => {
const {container} = render(
amisRender({
type: 'progress',
value: 60,
threshold: [
{
value: '30%',
color: 'red'
},
{
value: '90%',
color: 'blue'
}
],
showThresholdText: true
})
);
const thresholds = container.querySelectorAll('.cxd-Progress-line-threshold');
expect(thresholds.length).toBe(2);
expect(thresholds[0]).toHaveStyle({
'left': '30%',
'border-color': 'red'
});
expect(thresholds[1]).toHaveStyle({
'left': '90%',
'border-color': 'blue'
});
expect(container).toHaveTextContent('30%');
expect(container).toHaveTextContent('90%');
expect(container).toMatchSnapshot();
});
test('Renderer:Progress as form item', async () => {
const {container} = render(
amisRender({
type: 'form',
data: {
progress: 61
},
body: [
{
type: 'static-progress',
name: 'progress',
label: '进度'
}
]
})
);
expect(container.querySelector('.cxd-Progress-line-bar')).toHaveStyle({
width: '61%'
});
expect(container).toMatchSnapshot();
});
test('Renderer:Progress with stripe & animate', async () => {
const {container} = render(
amisRender({
type: 'progress',
animate: true,
value: 62,
stripe: true
})
);
expect(container.querySelector('.cxd-Progress-line-bar')).toHaveClass(
'cxd-Progress-line-bar--stripe cxd-Progress-line-bar--stripe-animate'
);
expect(container).toMatchSnapshot();
});
test('Renderer:Progress with mode', async () => {
const {container, rerender} = render(
amisRender({
type: 'progress',
value: 63,
mode: 'circle'
})
);
expect(container.querySelector('.cxd-Progress-circle')).toBeInTheDocument();
expect(container).toMatchSnapshot();
rerender(
amisRender({
type: 'progress',
value: 64,
mode: 'dashboard',
gapDegree: 100,
gapPosition: 'left'
})
);
// gapDegree 与 gapPosition 无法验证,因为是 svg
expect(container).toMatchSnapshot();
});
test('Renderer:Progress with strokeWidth', async () => {
const {container, rerender} = render(
amisRender({
type: 'progress',
value: 65,
strokeWidth: 12
})
);
expect(container.querySelector('.cxd-Progress-line-bar')).toHaveStyle({
height: '12px'
});
rerender(
amisRender({
type: 'progress',
value: 66,
mode: 'circle',
strokeWidth: 8
})
);
expect(
container.querySelector('.cxd-Progress-circle svg circle')
).toHaveAttribute('stroke-width', '8');
});
test('Renderer:Progress with valueTpl', async () => {
const {container, rerender} = render(
amisRender({
type: 'progress',
mode: 'circle',
value: 67,
valueTpl: '${value}个'
})
);
expect(container).toHaveTextContent('67个');
expect(container).toMatchSnapshot();
});

View File

@ -1,6 +1,6 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Renderer:progress 1`] = `
exports[`Renderer:Progress 1`] = `
<div>
<div
class="cxd-Progress"
@ -32,3 +32,425 @@ exports[`Renderer:progress 1`] = `
</div>
</div>
`;
exports[`Renderer:Progress as form item 1`] = `
<div>
<div
class="cxd-Panel cxd-Panel--default cxd-Panel--form"
style="position: relative;"
>
<div
class="cxd-Panel-heading"
>
<h3
class="cxd-Panel-title"
>
<span
class="cxd-TplField"
>
<span>
表单
</span>
</span>
</h3>
</div>
<div
class="cxd-Panel-body"
>
<form
class="cxd-Form cxd-Form--normal"
novalidate=""
>
<input
style="display: none;"
type="submit"
/>
<div
class="cxd-Form-item cxd-Form-item--normal"
data-role="form-item"
>
<label
class="cxd-Form-label"
>
<span>
<span
class="cxd-TplField"
>
<span>
进度
</span>
</span>
</span>
</label>
<div
class="cxd-Form-static"
>
<div
class="cxd-Form-control"
>
<div
class="cxd-Progress"
>
<div
class="cxd-Progress-line"
>
<div
class="cxd-Progress-line-inter"
>
<div
class="cxd-Progress-line-bar bg-success"
style="width: 61%;"
title="61%"
/>
</div>
</div>
<span
class="cxd-Progress-line-text"
>
<span
class="cxd-TplField"
>
<span>
61%
</span>
</span>
</span>
</div>
</div>
</div>
</div>
</form>
</div>
<div
class="cxd-Panel-footerWrap"
>
<div
class="cxd-Panel-btnToolbar cxd-Panel-footer"
>
<button
class="cxd-Button cxd-Button--primary cxd-Button--size-default"
type="submit"
>
<span>
提交
</span>
</button>
</div>
</div>
<div
class="resize-sensor"
style="position: absolute; left: 0px; top: 0px; right: 0px; bottom: 0px; overflow: scroll; z-index: -1; visibility: hidden;"
>
<div
class="resize-sensor-expand"
style="position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: scroll; z-index: -1; visibility: hidden;"
>
<div
style="position: absolute; left: 0px; top: 0px; width: 10px; height: 10px;"
/>
</div>
<div
class="resize-sensor-shrink"
style="position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: scroll; z-index: -1; visibility: hidden;"
>
<div
style="position: absolute; left: 0; top: 0; width: 200%; height: 200%"
/>
</div>
<div
class="resize-sensor-appear"
style="position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: scroll; z-index: -1; visibility: hidden;animation-name: apearSensor; animation-duration: 0.2s;"
/>
</div>
</div>
</div>
`;
exports[`Renderer:Progress with map 1`] = `
<div>
<div
class="cxd-Progress"
>
<div
class="cxd-Progress-line"
>
<div
class="cxd-Progress-line-inter"
>
<div
class="cxd-Progress-line-bar"
style="width: 60%; background-color: rgb(249, 109, 62);"
title="60%"
/>
</div>
</div>
<span
class="cxd-Progress-line-text"
>
<span
class="cxd-TplField"
>
<span>
60%
</span>
</span>
</span>
</div>
</div>
`;
exports[`Renderer:Progress with mode 1`] = `
<div>
<div
class="cxd-Progress"
>
<div
class="cxd-Progress-circle"
style="width: 80px; height: 80px;"
>
<svg
class="bg-success-circle"
role="presentation"
style="width: 80px; height: 80px;"
viewBox="-50 -50 100 100"
>
<circle
class="bg-success-circle-trail"
cx="0"
cy="0"
r="46"
stroke="#D9D9D9"
stroke-linecap="round"
stroke-width="8"
style="stroke: #D9D9D9; stroke-dasharray: 289.02652413026095px 289.02652413026095; stroke-dashoffset: 0; transform: rotate(-90deg); transform-origin: 0 0; transition: stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s, stroke-width .06s ease .3s, opacity .3s ease 0s; fill-opacity: 0;"
/>
<circle
class="bg-success-circle-path"
cx="0"
cy="0"
opacity="1"
r="46"
stroke-linecap="round"
stroke-width="8"
style="stroke-dasharray: 289.02652413026095px 289.02652413026095; stroke-dashoffset: 110.93981392819656; transform: rotate(-90deg); transform-origin: 0 0; transition: stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s, stroke-width .06s ease .3s, opacity .3s ease 0s; fill-opacity: 0; transition-duration: 0s, 0s;"
/>
</svg>
<span
class="cxd-Progress-circle-text"
>
<span
class="cxd-TplField"
>
<span>
63%
</span>
</span>
</span>
</div>
</div>
</div>
`;
exports[`Renderer:Progress with mode 2`] = `
<div>
<div
class="cxd-Progress"
>
<div
class="cxd-Progress-circle"
style="width: 80px; height: 80px;"
>
<svg
class="bg-success-circle"
role="presentation"
style="width: 80px; height: 80px;"
viewBox="-50 -50 100 100"
>
<circle
class="bg-success-circle-trail"
cx="0"
cy="0"
r="46"
stroke="#D9D9D9"
stroke-linecap="round"
stroke-width="8"
style="stroke: #D9D9D9; stroke-dasharray: 208.7413785385218px 289.02652413026095; stroke-dashoffset: 0; transform: rotate(230deg); transform-origin: 0 0; transition: stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s, stroke-width .06s ease .3s, opacity .3s ease 0s; fill-opacity: 0;"
/>
<circle
class="bg-success-circle-path"
cx="0"
cy="0"
opacity="1"
r="46"
stroke-linecap="round"
stroke-width="8"
style="stroke-dasharray: 208.7413785385218px 289.02652413026095; stroke-dashoffset: 79.14689627386784; transform: rotate(230deg); transform-origin: 0 0; transition: stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s, stroke-width .06s ease .3s, opacity .3s ease 0s; fill-opacity: 0; transition-duration: 0s, 0s;"
/>
</svg>
<span
class="cxd-Progress-circle-text"
>
<span
class="cxd-TplField"
>
<span>
64%
</span>
</span>
</span>
</div>
</div>
</div>
`;
exports[`Renderer:Progress with stripe & animate 1`] = `
<div>
<div
class="cxd-Progress"
>
<div
class="cxd-Progress-line"
>
<div
class="cxd-Progress-line-inter"
>
<div
class="cxd-Progress-line-bar bg-success cxd-Progress-line-bar--stripe cxd-Progress-line-bar--stripe-animate"
style="width: 62%;"
title="62%"
/>
</div>
</div>
<span
class="cxd-Progress-line-text"
>
<span
class="cxd-TplField"
>
<span>
62%
</span>
</span>
</span>
</div>
</div>
`;
exports[`Renderer:Progress with threshold & showThresholdText 1`] = `
<div>
<div
class="cxd-Progress"
>
<div
class="cxd-Progress-line"
>
<div
class="cxd-Progress-line-threshold"
style="left: 30%; border-color: red;"
>
<span
class="cxd-Progress-line-threshold-text"
>
30%
</span>
</div>
<div
class="cxd-Progress-line-threshold"
style="left: 90%; border-color: blue;"
>
<span
class="cxd-Progress-line-threshold-text"
>
90%
</span>
</div>
<div
class="cxd-Progress-line-inter"
>
<div
class="cxd-Progress-line-bar bg-info"
style="width: 60%;"
title="60%"
/>
</div>
</div>
<span
class="cxd-Progress-line-text"
>
<span
class="cxd-TplField"
>
<span>
60%
</span>
</span>
</span>
</div>
</div>
`;
exports[`Renderer:Progress with valueTpl 1`] = `
<div>
<div
class="cxd-Progress"
>
<div
class="cxd-Progress-circle"
style="width: 80px; height: 80px;"
>
<svg
class="bg-success-circle"
role="presentation"
style="width: 80px; height: 80px;"
viewBox="-50 -50 100 100"
>
<circle
class="bg-success-circle-trail"
cx="0"
cy="0"
r="46"
stroke="#D9D9D9"
stroke-linecap="round"
stroke-width="8"
style="stroke: #D9D9D9; stroke-dasharray: 289.02652413026095px 289.02652413026095; stroke-dashoffset: 0; transform: rotate(-90deg); transform-origin: 0 0; transition: stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s, stroke-width .06s ease .3s, opacity .3s ease 0s; fill-opacity: 0;"
/>
<circle
class="bg-success-circle-path"
cx="0"
cy="0"
opacity="1"
r="46"
stroke-linecap="round"
stroke-width="8"
style="stroke-dasharray: 289.02652413026095px 289.02652413026095; stroke-dashoffset: 99.37875296298611; transform: rotate(-90deg); transform-origin: 0 0; transition: stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s, stroke-width .06s ease .3s, opacity .3s ease 0s; fill-opacity: 0; transition-duration: 0s, 0s;"
/>
</svg>
<span
class="cxd-Progress-circle-text"
>
<span
class="cxd-TplField"
>
<span>
67个
</span>
</span>
</span>
</div>
</div>
</div>
`;