From 9ca104278e4e9b731158dc1e83ff91ccee15c7ce Mon Sep 17 00:00:00 2001 From: * <8> Date: Tue, 1 Mar 2022 11:57:41 +0800 Subject: [PATCH] Match-id-89458c22ed2f2dfd010d67ad0d278bf567069cf2 --- jest.config.js | 2 +- .../__tests__/ComponentTest/UseState.test.js | 23 ++++++------- scripts/__tests__/jest/customMatcher.js | 12 +++---- scripts/__tests__/jest/logUtils.js | 30 ++++++++++++++++ scripts/__tests__/jest/setupTests.js | 1 - scripts/__tests__/jest/testUtil.js | 34 ------------------- 6 files changed, 48 insertions(+), 54 deletions(-) create mode 100644 scripts/__tests__/jest/logUtils.js delete mode 100644 scripts/__tests__/jest/setupTests.js delete mode 100644 scripts/__tests__/jest/testUtil.js diff --git a/jest.config.js b/jest.config.js index 5a341ef2..e9a54092 100644 --- a/jest.config.js +++ b/jest.config.js @@ -127,7 +127,7 @@ module.exports = { // runner: "jest-runner", // The paths to modules that run some code to configure or set up the testing environment before each test - setupFiles: [require.resolve('./scripts/__tests__/jest/setupTests.js')], + //setupFiles: [], // A list of paths to modules that run some code to configure or set up the testing framework before each test setupFilesAfterEnv: [require.resolve('./scripts/__tests__/jest/setupEnvironment.js')], diff --git a/scripts/__tests__/ComponentTest/UseState.test.js b/scripts/__tests__/ComponentTest/UseState.test.js index d843d8b7..aec70a42 100644 --- a/scripts/__tests__/ComponentTest/UseState.test.js +++ b/scripts/__tests__/ComponentTest/UseState.test.js @@ -1,7 +1,6 @@ import * as React from '../../../libs/horizon/src/external/Horizon'; import * as HorizonDOM from '../../../libs/horizon/src/dom/DOMExternal'; -//import { act } from 'react-dom/test-utils'; -import * as Scheduler from 'scheduler'; +import * as LogUtils from '../jest/logUtils'; describe('useState Hook Test', () => { const { useState, forwardRef, useImperativeHandle, memo } = React; @@ -18,11 +17,11 @@ describe('useState Hook Test', () => { unmountComponentAtNode(container); container.remove(); container = null; - Scheduler.reset(); + LogUtils.reset(); }); const Text = (props) => { - Scheduler.unstable_yieldValue(props.text); + LogUtils.injectValue(props.text); return

{props.text}

; } @@ -80,17 +79,17 @@ describe('useState Hook Test', () => { } HorizonDOM.render(, container); expect(container.querySelector('p').innerHTML).toBe('0'); - expect(Scheduler).toHaveYielded([0]); + expect(LogUtils).toMatchValue([0]); // useState修改state 时,设置相同的值,函数组件不会重新渲染 setNum(0); - expect(Scheduler).toHaveYielded([]); + expect(LogUtils).toMatchValue([]); expect(container.querySelector('p').innerHTML).toBe('0'); }); it('useState的惰性初始化', () => { const App = forwardRef((props, ref) => { const [num, setNum] = useState(() => { - Scheduler.unstable_yieldValue(props.initNum); + LogUtils.injectValue(props.initNum); return props.initNum }); useImperativeHandle(ref, () => ({ setNum })) @@ -99,12 +98,12 @@ describe('useState Hook Test', () => { }) const ref = React.createRef(null); HorizonDOM.render(, container); - expect(Scheduler).toHaveYielded([1]); + expect(LogUtils).toMatchValue([1]); expect(container.querySelector('p').innerHTML).toBe('1'); // 设置num为3 ref.current.setNum(3); // 初始化函数只在初始渲染时被调用,所以Scheduler里的dataArray清空后没有新增。 - expect(Scheduler).toHaveYielded([]); + expect(LogUtils).toMatchValue([]); expect(container.querySelector('p').innerHTML).toBe('3'); }); @@ -116,15 +115,15 @@ describe('useState Hook Test', () => { return ; }) HorizonDOM.render(, container); - expect(Scheduler).toHaveYielded([0]); + expect(LogUtils).toMatchValue([0]); expect(container.querySelector('p').innerHTML).toBe('0'); // 不会重新渲染 HorizonDOM.render(, container); - expect(Scheduler).toHaveYielded([]); + expect(LogUtils).toMatchValue([]); expect(container.querySelector('p').innerHTML).toBe('0'); // 会重新渲染 setNum(1) - expect(Scheduler).toHaveYielded([1]); + expect(LogUtils).toMatchValue([1]); expect(container.querySelector('p').innerHTML).toBe('1'); }); }); diff --git a/scripts/__tests__/jest/customMatcher.js b/scripts/__tests__/jest/customMatcher.js index 66fd0db5..a2fe5143 100644 --- a/scripts/__tests__/jest/customMatcher.js +++ b/scripts/__tests__/jest/customMatcher.js @@ -1,4 +1,4 @@ -function captureAssertion(fn) { +function runAssertion(fn) { try { fn(); } catch (error) { @@ -10,13 +10,13 @@ function captureAssertion(fn) { return {pass: true}; } -function toHaveYielded(Scheduler, expectedYields) { - return captureAssertion(() => { - const actualYields = Scheduler.unstable_clearYields(); - expect(actualYields).toEqual(expectedYields); +function toMatchValue(LogUtils, expectedValues) { + return runAssertion(() => { + const actualValues = LogUtils.getAndClearValue(); + expect(actualValues).toEqual(expectedValues); }); } module.exports = { - toHaveYielded, + toMatchValue, }; diff --git a/scripts/__tests__/jest/logUtils.js b/scripts/__tests__/jest/logUtils.js new file mode 100644 index 00000000..bbfbeb38 --- /dev/null +++ b/scripts/__tests__/jest/logUtils.js @@ -0,0 +1,30 @@ +let dataArray = null; +let isWorking = false; + +const injectValue = (value) => { + if (dataArray === null) { + dataArray = [value]; + } else { + dataArray.push(value); + } +}; + +const getAndClearValue = () => { + if (dataArray === null) { + return []; + } + const values = dataArray; + dataArray = null; + return values; +}; + +const reset = () => { + if (isWorking) { + throw new Error('Cannot reset while already flushing work.'); + } + dataArray = null; +} + +exports.reset = reset; +exports.injectValue = injectValue; +exports.getAndClearValue = getAndClearValue; diff --git a/scripts/__tests__/jest/setupTests.js b/scripts/__tests__/jest/setupTests.js deleted file mode 100644 index 280452e6..00000000 --- a/scripts/__tests__/jest/setupTests.js +++ /dev/null @@ -1 +0,0 @@ -jest.mock('scheduler', () => require('./testUtil.js')); diff --git a/scripts/__tests__/jest/testUtil.js b/scripts/__tests__/jest/testUtil.js deleted file mode 100644 index 8f870b37..00000000 --- a/scripts/__tests__/jest/testUtil.js +++ /dev/null @@ -1,34 +0,0 @@ -if (process.env.NODE_ENV !== 'production') { - (function () { - let dataArray = null; - let isFlushing = false; - - const unstable_yieldValue = (value) => { - if (dataArray === null) { - dataArray = [value]; - } else { - dataArray.push(value); - } - }; - - const unstable_clearYields = () => { - if (dataArray === null) { - return []; - } - const values = dataArray; - dataArray = null; - return values; - }; - - const reset = () => { - if (isFlushing) { - throw new Error('Cannot reset while already flushing work.'); - } - dataArray = null; - } - - exports.reset = reset; - exports.unstable_yieldValue = unstable_yieldValue; - exports.unstable_clearYields = unstable_clearYields; - })(); -}