diff --git a/jest.config.js b/jest.config.js
index 333fc68e..1c30d15d 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -58,15 +58,15 @@ module.exports = {
// globalTeardown: undefined,
// A set of global variables that need to be available in all test environments
- // globals: {
- // 'isDev': process.env.NODE_ENV === 'development',
- // 'MessageChannel': function MessageChannel() {
- // this.port1 = {};
- // this.port2 = {
- // postMessage() {}
- // };
- // }
- // },
+ globals: {
+ //'isDev': process.env.NODE_ENV === 'development',
+ 'MessageChannel': function MessageChannel() {
+ this.port1 = {};
+ this.port2 = {
+ postMessage() {}
+ };
+ }
+ },
// The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers.
// maxWorkers: "50%",
diff --git a/scripts/__tests__/ComponentTest/HookTest/UseCallback.test.js b/scripts/__tests__/ComponentTest/HookTest/UseCallback.test.js
new file mode 100644
index 00000000..071c4512
--- /dev/null
+++ b/scripts/__tests__/ComponentTest/HookTest/UseCallback.test.js
@@ -0,0 +1,36 @@
+/* eslint-disable no-undef */
+import * as React from '../../../../libs/horizon/src/external/Horizon';
+import * as HorizonDOM from '../../../../libs/horizon/src/dom/DOMExternal';
+
+describe('useCallback Hook Test', () => {
+ const { useState, useCallback } = React;
+
+ it('测试useCallback', () => {
+ const App = (props) => {
+ const [num, setNum] = useState(0);
+ const NumUseCallback = useCallback(() => {
+ setNum(num + props.text)
+ }, [props]);
+ return (
+ <>
+
{num}
+
+ >
+ )
+ }
+ HorizonDOM.render(, container);
+ expect(container.querySelector('p').innerHTML).toBe('0');
+ // 点击按钮触发num加1
+ container.querySelector('button').click();
+ expect(container.querySelector('p').innerHTML).toBe('1');
+ // 再次点击,依赖项没变,num不增加
+ container.querySelector('button').click();
+ expect(container.querySelector('p').innerHTML).toBe('1');
+
+ HorizonDOM.render(, container);
+ expect(container.querySelector('p').innerHTML).toBe('1');
+ // 依赖项有变化,点击按钮num增加
+ container.querySelector('button').click();
+ expect(container.querySelector('p').innerHTML).toBe('3');
+ });
+});
diff --git a/scripts/__tests__/ComponentTest/HookTest/UseContext.test.js b/scripts/__tests__/ComponentTest/HookTest/UseContext.test.js
new file mode 100644
index 00000000..89482aff
--- /dev/null
+++ b/scripts/__tests__/ComponentTest/HookTest/UseContext.test.js
@@ -0,0 +1,52 @@
+/* eslint-disable no-undef */
+import * as React from '../../../../libs/horizon/src/external/Horizon';
+import * as HorizonDOM from '../../../../libs/horizon/src/dom/DOMExternal';
+import { act } from '../../jest/customMatcher';
+
+describe('useContext Hook Test', () => {
+ const { useState, useContext } = React;
+ const { unmountComponentAtNode } = HorizonDOM;
+
+ it('简单使用useContext', () => {
+ const LanguageTypes = {
+ JAVA: 'Java',
+ JAVASCRIPT: 'JavaScript',
+ };
+ const defaultValue = { type: LanguageTypes.JAVASCRIPT };
+ const SystemLanguageContext = React.createContext(defaultValue);
+
+ const SystemLanguageProvider = ({ type, children }) => {
+ return (
+
+ {children}
+
+ );
+ };
+ const TestFunction = () => {
+ const context = useContext(SystemLanguageContext);
+ return {context.type}
;
+ }
+ let setValue;
+ const App = () => {
+ const [value, _setValue] = useState(LanguageTypes.JAVA);
+ setValue = _setValue;
+ return (
+
+
+
+
+
+ )
+ }
+ HorizonDOM.render(, container);
+ // 测试当Provider未提供时,获取到的默认值'JavaScript'。
+ expect(container.querySelector('p').innerHTML).toBe('JavaScript');
+ unmountComponentAtNode(container);
+ HorizonDOM.render(, container);
+ // 测试当Provider提供时,可以获取到Provider的值'Java'。
+ expect(container.querySelector('p').innerHTML).toBe('Java');
+ // 测试当Provider改变时,可以获取到最新Provider的值。
+ act(() => setValue(LanguageTypes.JAVASCRIPT));
+ expect(container.querySelector('p').innerHTML).toBe('JavaScript');
+ });
+});
diff --git a/scripts/__tests__/ComponentTest/UseEffect.test.js b/scripts/__tests__/ComponentTest/HookTest/UseEffect.test.js
similarity index 93%
rename from scripts/__tests__/ComponentTest/UseEffect.test.js
rename to scripts/__tests__/ComponentTest/HookTest/UseEffect.test.js
index 89513844..89459ab4 100644
--- a/scripts/__tests__/ComponentTest/UseEffect.test.js
+++ b/scripts/__tests__/ComponentTest/HookTest/UseEffect.test.js
@@ -1,32 +1,35 @@
-import * as React from '../../../libs/horizon/src/external/Horizon';
-import * as HorizonDOM from '../../../libs/horizon/src/dom/DOMExternal';
-import * as LogUtils from '../jest/logUtils';
-import { act } from '../jest/customMatcher';
+/* eslint-disable no-undef */
+import * as React from '../../../../libs/horizon/src/external/Horizon';
+import * as HorizonDOM from '../../../../libs/horizon/src/dom/DOMExternal';
+import * as LogUtils from '../../jest/logUtils';
+import { act } from '../../jest/customMatcher';
+import Text from '../../jest/Text';
describe('useEffect Hook Test', () => {
const { useEffect, useLayoutEffect, useState, memo, forwardRef } = React;
- const { unmountComponentAtNode } = HorizonDOM;
- let container = null;
- beforeEach(() => {
- LogUtils.clear();
- // 创建一个 DOM 元素作为渲染目标
- container = document.createElement('div');
- document.body.appendChild(container);
- });
- afterEach(() => {
- // 退出时进行清理
- unmountComponentAtNode(container);
- container.remove();
- container = null;
- LogUtils.clear();
+ it('简单使用useEffect', () => {
+ const App = () => {
+ const [num, setNum] = useState(0);
+ useEffect(() => {
+ document.getElementById('p').style.display = num === 0 ? 'none' : 'inline';
+ });
+ return (
+ <>
+ {num}
+