|
1 | 1 | /* eslint-disable react/no-render-return-value, max-classes-per-file, func-names, no-console */
|
2 | 2 | import React, { cloneElement } from 'react';
|
3 | 3 | import { act } from 'react-dom/test-utils';
|
4 |
| -import { mount } from 'enzyme'; |
| 4 | +import { mount, ReactWrapper } from 'enzyme'; |
5 | 5 | import Portal from 'rc-util/lib/Portal';
|
6 | 6 | import KeyCode from 'rc-util/lib/KeyCode';
|
7 |
| -import Dialog from '../src'; |
| 7 | +import Dialog, { DialogProps } from '../src'; |
8 | 8 |
|
9 | 9 | describe('dialog', () => {
|
10 | 10 | beforeEach(() => {
|
@@ -250,7 +250,10 @@ describe('dialog', () => {
|
250 | 250 | });
|
251 | 251 |
|
252 | 252 | expect(
|
253 |
| - (wrapper.find('.rc-dialog').at(0).getDOMNode() as HTMLDivElement).style['transform-origin'], |
| 253 | + (wrapper |
| 254 | + .find('.rc-dialog') |
| 255 | + .at(0) |
| 256 | + .getDOMNode() as HTMLDivElement).style['transform-origin'], |
254 | 257 | ).toBeTruthy();
|
255 | 258 | });
|
256 | 259 |
|
@@ -355,23 +358,43 @@ describe('dialog', () => {
|
355 | 358 | });
|
356 | 359 | });
|
357 | 360 |
|
358 |
| - it('should not re-render when visible changed', () => { |
359 |
| - let renderTimes = 0; |
360 |
| - const RenderChecker = () => { |
361 |
| - renderTimes += 1; |
362 |
| - return null; |
363 |
| - }; |
| 361 | + describe('re-render', () => { |
| 362 | + function createWrapper(props?: Partial<DialogProps>): [ReactWrapper, () => number] { |
| 363 | + let renderTimes = 0; |
| 364 | + const RenderChecker = () => { |
| 365 | + renderTimes += 1; |
| 366 | + return null; |
| 367 | + }; |
364 | 368 |
|
365 |
| - const wrapper = mount( |
366 |
| - <Dialog visible> |
367 |
| - <RenderChecker /> |
368 |
| - </Dialog>, |
369 |
| - ); |
| 369 | + const Demo = (demoProps?: any) => { |
| 370 | + return ( |
| 371 | + <Dialog visible {...props} {...demoProps}> |
| 372 | + <RenderChecker /> |
| 373 | + </Dialog> |
| 374 | + ); |
| 375 | + }; |
370 | 376 |
|
371 |
| - expect(renderTimes).toEqual(1); |
| 377 | + const wrapper = mount(<Demo />); |
372 | 378 |
|
373 |
| - // Hidden should not trigger render |
374 |
| - wrapper.setProps({ visible: false }); |
375 |
| - expect(renderTimes).toEqual(1); |
| 379 | + return [wrapper, () => renderTimes]; |
| 380 | + } |
| 381 | + |
| 382 | + it('should not re-render when visible changed', () => { |
| 383 | + const [wrapper, getRenderTimes] = createWrapper(); |
| 384 | + expect(getRenderTimes()).toEqual(1); |
| 385 | + |
| 386 | + // Hidden should not trigger render |
| 387 | + wrapper.setProps({ visible: false }); |
| 388 | + expect(getRenderTimes()).toEqual(1); |
| 389 | + }); |
| 390 | + |
| 391 | + it('should re-render when forceRender', () => { |
| 392 | + const [wrapper, getRenderTimes] = createWrapper({ forceRender: true }); |
| 393 | + expect(getRenderTimes()).toEqual(1); |
| 394 | + |
| 395 | + // Hidden should not trigger render |
| 396 | + wrapper.setProps({ visible: false }); |
| 397 | + expect(getRenderTimes()).toEqual(2); |
| 398 | + }); |
376 | 399 | });
|
377 | 400 | });
|
0 commit comments