mirror of
https://github.com/ant-design/ant-design.git
synced 2024-11-28 05:05:48 +08:00
Fix async test cases
This commit is contained in:
parent
9a9196ca10
commit
46d1296045
@ -2,17 +2,23 @@ import React from 'react';
|
|||||||
import { mount } from 'enzyme';
|
import { mount } from 'enzyme';
|
||||||
import BackTop from '..';
|
import BackTop from '..';
|
||||||
|
|
||||||
const delay = timeout => new Promise(resolve => setTimeout(resolve, timeout));
|
|
||||||
|
|
||||||
describe('BackTop', () => {
|
describe('BackTop', () => {
|
||||||
it('should scroll to top after click it', async () => {
|
beforeAll(() => {
|
||||||
|
jest.useFakeTimers();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(() => {
|
||||||
|
jest.useRealTimers();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should scroll to top after click it', () => {
|
||||||
const wrapper = mount(<BackTop visibilityHeight={-1} />);
|
const wrapper = mount(<BackTop visibilityHeight={-1} />);
|
||||||
document.documentElement.scrollTop = 400;
|
document.documentElement.scrollTop = 400;
|
||||||
// trigger scroll manually
|
// trigger scroll manually
|
||||||
wrapper.node.handleScroll();
|
wrapper.node.handleScroll();
|
||||||
await delay(500);
|
jest.runAllTimers();
|
||||||
wrapper.find('.ant-back-top').simulate('click');
|
wrapper.find('.ant-back-top').simulate('click');
|
||||||
await delay(500);
|
jest.runAllTimers();
|
||||||
expect(Math.round(document.documentElement.scrollTop)).toBe(0);
|
expect(Math.round(document.documentElement.scrollTop)).toBe(0);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -2,10 +2,17 @@ import React from 'react';
|
|||||||
import { mount } from 'enzyme';
|
import { mount } from 'enzyme';
|
||||||
import Card from '../index';
|
import Card from '../index';
|
||||||
|
|
||||||
const delay = timeout => new Promise(resolve => setTimeout(resolve, timeout));
|
|
||||||
const testMethod = typeof window !== 'undefined' ? it : xit;
|
const testMethod = typeof window !== 'undefined' ? it : xit;
|
||||||
|
|
||||||
describe('Card', () => {
|
describe('Card', () => {
|
||||||
|
beforeAll(() => {
|
||||||
|
jest.useFakeTimers();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(() => {
|
||||||
|
jest.useRealTimers();
|
||||||
|
});
|
||||||
|
|
||||||
function fakeResizeWindowTo(wrapper, width) {
|
function fakeResizeWindowTo(wrapper, width) {
|
||||||
Object.defineProperties(wrapper.node.container, {
|
Object.defineProperties(wrapper.node.container, {
|
||||||
offsetWidth: {
|
offsetWidth: {
|
||||||
@ -16,13 +23,13 @@ describe('Card', () => {
|
|||||||
window.resizeTo(width);
|
window.resizeTo(width);
|
||||||
}
|
}
|
||||||
|
|
||||||
testMethod('resize card will trigger different padding', async () => {
|
testMethod('resize card will trigger different padding', () => {
|
||||||
const wrapper = mount(<Card title="xxx">xxx</Card>);
|
const wrapper = mount(<Card title="xxx">xxx</Card>);
|
||||||
fakeResizeWindowTo(wrapper, 1000);
|
fakeResizeWindowTo(wrapper, 1000);
|
||||||
await delay(0);
|
jest.runAllTimers();
|
||||||
expect(wrapper.hasClass('ant-card-wider-padding')).toBe(true);
|
expect(wrapper.hasClass('ant-card-wider-padding')).toBe(true);
|
||||||
fakeResizeWindowTo(wrapper, 800);
|
fakeResizeWindowTo(wrapper, 800);
|
||||||
await delay(0);
|
jest.runAllTimers();
|
||||||
expect(wrapper.hasClass('ant-card-wider-padding')).toBe(false);
|
expect(wrapper.hasClass('ant-card-wider-padding')).toBe(false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -5,10 +5,8 @@ import Form from '../../form';
|
|||||||
|
|
||||||
const { TextArea } = Input;
|
const { TextArea } = Input;
|
||||||
|
|
||||||
const delay = timeout => new Promise(resolve => setTimeout(resolve, timeout));
|
|
||||||
|
|
||||||
describe('Input', () => {
|
describe('Input', () => {
|
||||||
it('should support maxLength', async () => {
|
it('should support maxLength', () => {
|
||||||
const wrapper = mount(
|
const wrapper = mount(
|
||||||
<Input maxLength="3" />
|
<Input maxLength="3" />
|
||||||
);
|
);
|
||||||
@ -17,27 +15,35 @@ describe('Input', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('TextArea', () => {
|
describe('TextArea', () => {
|
||||||
it('should auto calculate height according to content length', async () => {
|
beforeAll(() => {
|
||||||
|
jest.useFakeTimers();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(() => {
|
||||||
|
jest.useRealTimers();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should auto calculate height according to content length', () => {
|
||||||
const wrapper = mount(
|
const wrapper = mount(
|
||||||
<TextArea value="" readOnly autosize />
|
<TextArea value="" readOnly autosize />
|
||||||
);
|
);
|
||||||
const mockFunc = jest.spyOn(wrapper.node, 'resizeTextarea');
|
const mockFunc = jest.spyOn(wrapper.node, 'resizeTextarea');
|
||||||
wrapper.setProps({ value: '1111\n2222\n3333' });
|
wrapper.setProps({ value: '1111\n2222\n3333' });
|
||||||
await delay(0);
|
jest.runAllTimers();
|
||||||
expect(mockFunc).toHaveBeenCalledTimes(1);
|
expect(mockFunc).toHaveBeenCalledTimes(1);
|
||||||
wrapper.setProps({ value: '1111' });
|
wrapper.setProps({ value: '1111' });
|
||||||
await delay(0);
|
jest.runAllTimers();
|
||||||
expect(mockFunc).toHaveBeenCalledTimes(2);
|
expect(mockFunc).toHaveBeenCalledTimes(2);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should support disabled', async () => {
|
it('should support disabled', () => {
|
||||||
const wrapper = mount(
|
const wrapper = mount(
|
||||||
<TextArea disabled />
|
<TextArea disabled />
|
||||||
);
|
);
|
||||||
expect(wrapper).toMatchSnapshot();
|
expect(wrapper).toMatchSnapshot();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should support maxLength', async () => {
|
it('should support maxLength', () => {
|
||||||
const wrapper = mount(
|
const wrapper = mount(
|
||||||
<TextArea maxLength="10" />
|
<TextArea maxLength="10" />
|
||||||
);
|
);
|
||||||
@ -46,7 +52,7 @@ describe('TextArea', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('As Form Control', () => {
|
describe('As Form Control', () => {
|
||||||
it('should be reset when wrapped in form.getFieldDecorator without initialValue', async () => {
|
it('should be reset when wrapped in form.getFieldDecorator without initialValue', () => {
|
||||||
class Demo extends React.Component {
|
class Demo extends React.Component {
|
||||||
reset = () => {
|
reset = () => {
|
||||||
this.props.form.resetFields();
|
this.props.form.resetFields();
|
||||||
@ -79,7 +85,7 @@ describe('As Form Control', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('Input.Search', () => {
|
describe('Input.Search', () => {
|
||||||
it('should support suffix', async () => {
|
it('should support suffix', () => {
|
||||||
const wrapper = mount(
|
const wrapper = mount(
|
||||||
<Input.Search suffix="suffix" />
|
<Input.Search suffix="suffix" />
|
||||||
);
|
);
|
||||||
|
@ -4,9 +4,16 @@ import Menu from '..';
|
|||||||
import Icon from '../../icon';
|
import Icon from '../../icon';
|
||||||
|
|
||||||
const { SubMenu } = Menu;
|
const { SubMenu } = Menu;
|
||||||
const delay = timeout => new Promise(resolve => setTimeout(resolve, timeout));
|
|
||||||
|
|
||||||
describe('Menu', () => {
|
describe('Menu', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
jest.useFakeTimers();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
jest.useRealTimers();
|
||||||
|
});
|
||||||
|
|
||||||
it('should accept defaultOpenKeys in mode horizontal', () => {
|
it('should accept defaultOpenKeys in mode horizontal', () => {
|
||||||
const wrapper = mount(
|
const wrapper = mount(
|
||||||
<Menu defaultOpenKeys={['1']} mode="horizontal">
|
<Menu defaultOpenKeys={['1']} mode="horizontal">
|
||||||
@ -131,6 +138,7 @@ describe('Menu', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should always follow openKeys when mode is switched', () => {
|
it('should always follow openKeys when mode is switched', () => {
|
||||||
|
jest.useRealTimers();
|
||||||
const wrapper = mount(
|
const wrapper = mount(
|
||||||
<Menu defaultOpenKeys={['1']} mode="inline">
|
<Menu defaultOpenKeys={['1']} mode="inline">
|
||||||
<Menu.Item key="menu1">
|
<Menu.Item key="menu1">
|
||||||
@ -160,7 +168,7 @@ describe('Menu', () => {
|
|||||||
}, 300);
|
}, 300);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should open submenu when click submenu title (inline)', async () => {
|
it('should open submenu when click submenu title (inline)', () => {
|
||||||
const wrapper = mount(
|
const wrapper = mount(
|
||||||
<Menu mode="inline">
|
<Menu mode="inline">
|
||||||
<SubMenu key="1" title="submenu1">
|
<SubMenu key="1" title="submenu1">
|
||||||
@ -175,11 +183,11 @@ describe('Menu', () => {
|
|||||||
expect(wrapper.find('.ant-menu-sub').length).toBe(1);
|
expect(wrapper.find('.ant-menu-sub').length).toBe(1);
|
||||||
expect(wrapper.find('.ant-menu-sub').at(0).hasClass('ant-menu-hidden')).not.toBe(true);
|
expect(wrapper.find('.ant-menu-sub').at(0).hasClass('ant-menu-hidden')).not.toBe(true);
|
||||||
wrapper.find('.ant-menu-submenu-title').simulate('click');
|
wrapper.find('.ant-menu-submenu-title').simulate('click');
|
||||||
await delay(300);
|
jest.runAllTimers();
|
||||||
expect(wrapper.find('.ant-menu-sub').at(0).hasClass('ant-menu-hidden')).toBe(true);
|
expect(wrapper.find('.ant-menu-sub').at(0).hasClass('ant-menu-hidden')).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should open submenu when hover submenu title (vertical)', async () => {
|
it('should open submenu when hover submenu title (vertical)', () => {
|
||||||
const wrapper = mount(
|
const wrapper = mount(
|
||||||
<Menu mode="vertical">
|
<Menu mode="vertical">
|
||||||
<SubMenu key="1" title="submenu1">
|
<SubMenu key="1" title="submenu1">
|
||||||
@ -194,11 +202,11 @@ describe('Menu', () => {
|
|||||||
expect(wrapper.find('.ant-menu-sub').length).toBe(1);
|
expect(wrapper.find('.ant-menu-sub').length).toBe(1);
|
||||||
expect(wrapper.find('.ant-menu-sub').at(0).hasClass('ant-menu-hidden')).not.toBe(true);
|
expect(wrapper.find('.ant-menu-sub').at(0).hasClass('ant-menu-hidden')).not.toBe(true);
|
||||||
wrapper.find('.ant-menu-submenu').simulate('mouseleave');
|
wrapper.find('.ant-menu-submenu').simulate('mouseleave');
|
||||||
await delay(300);
|
jest.runAllTimers();
|
||||||
expect(wrapper.find('.ant-menu-sub').at(0).hasClass('ant-menu-hidden')).toBe(true);
|
expect(wrapper.find('.ant-menu-sub').at(0).hasClass('ant-menu-hidden')).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should open submenu when hover submenu title (horizontal)', async () => {
|
it('should open submenu when hover submenu title (horizontal)', () => {
|
||||||
const wrapper = mount(
|
const wrapper = mount(
|
||||||
<Menu mode="horizontal">
|
<Menu mode="horizontal">
|
||||||
<SubMenu key="1" title="submenu1">
|
<SubMenu key="1" title="submenu1">
|
||||||
@ -213,7 +221,7 @@ describe('Menu', () => {
|
|||||||
expect(wrapper.find('.ant-menu-sub').length).toBe(1);
|
expect(wrapper.find('.ant-menu-sub').length).toBe(1);
|
||||||
expect(wrapper.find('.ant-menu-sub').at(0).hasClass('ant-menu-hidden')).not.toBe(true);
|
expect(wrapper.find('.ant-menu-sub').at(0).hasClass('ant-menu-hidden')).not.toBe(true);
|
||||||
wrapper.find('.ant-menu-submenu').simulate('mouseleave');
|
wrapper.find('.ant-menu-submenu').simulate('mouseleave');
|
||||||
await delay(300);
|
jest.runAllTimers();
|
||||||
expect(wrapper.find('.ant-menu-sub').at(0).hasClass('ant-menu-hidden')).toBe(true);
|
expect(wrapper.find('.ant-menu-sub').at(0).hasClass('ant-menu-hidden')).toBe(true);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,8 +1,14 @@
|
|||||||
import message from '..';
|
import message from '..';
|
||||||
|
|
||||||
const delay = timeout => new Promise(resolve => setTimeout(resolve, timeout));
|
|
||||||
|
|
||||||
describe('message', () => {
|
describe('message', () => {
|
||||||
|
beforeAll(() => {
|
||||||
|
jest.useFakeTimers();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(() => {
|
||||||
|
jest.useRealTimers();
|
||||||
|
});
|
||||||
|
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
message.destroy();
|
message.destroy();
|
||||||
});
|
});
|
||||||
@ -28,15 +34,15 @@ describe('message', () => {
|
|||||||
expect(document.querySelectorAll('.custom-container').length).toBe(1);
|
expect(document.querySelectorAll('.custom-container').length).toBe(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should be able to hide manually', async () => {
|
it('should be able to hide manually', () => {
|
||||||
const hide1 = message.info('whatever', 0);
|
const hide1 = message.info('whatever', 0);
|
||||||
const hide2 = message.info('whatever', 0);
|
const hide2 = message.info('whatever', 0);
|
||||||
expect(document.querySelectorAll('.ant-message-notice').length).toBe(2);
|
expect(document.querySelectorAll('.ant-message-notice').length).toBe(2);
|
||||||
hide1();
|
hide1();
|
||||||
await delay(100);
|
jest.runAllTimers();
|
||||||
expect(document.querySelectorAll('.ant-message-notice').length).toBe(1);
|
expect(document.querySelectorAll('.ant-message-notice').length).toBe(1);
|
||||||
hide2();
|
hide2();
|
||||||
await delay(100);
|
jest.runAllTimers();
|
||||||
expect(document.querySelectorAll('.ant-message-notice').length).toBe(0);
|
expect(document.querySelectorAll('.ant-message-notice').length).toBe(0);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user