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;
- })();
-}