Match-id-cf2539a89122b0c25a798cf4990d143902cb20dd

This commit is contained in:
* 2022-09-13 16:29:26 +08:00 committed by *
parent 9f3f77e87d
commit c5a275d657
2 changed files with 51 additions and 0 deletions

View File

@ -1,5 +1,6 @@
import * as Horizon from '@cloudsop/horizon/index.ts'; import * as Horizon from '@cloudsop/horizon/index.ts';
import { getLogUtils } from '../jest/testUtils'; import { getLogUtils } from '../jest/testUtils';
import dispatchChangeEvent from '../utils/dispatchChangeEvent';
describe('PortalComponent Test', () => { describe('PortalComponent Test', () => {
const LogUtils = getLogUtils(); const LogUtils = getLogUtils();
@ -235,4 +236,45 @@ describe('PortalComponent Test', () => {
btnRef.current.click(); btnRef.current.click();
expect(onClick).toHaveBeenCalledTimes(1); expect(onClick).toHaveBeenCalledTimes(1);
}); });
it('Portal onChange should activate', () => {
class Dialog extends Horizon.Component {
node;
constructor(props) {
super(props);
this.node = window.document.createElement('div');
window.document.body.appendChild(this.node);
}
`` render() {
return Horizon.createPortal(this.props.children, this.node);
}
}
let showPortalInput;
const fn = jest.fn();
const inputRef = Horizon.createRef();
function Input() {
const [show, setShow] = Horizon.useState(false);
showPortalInput = setShow;
Horizon.useEffect(() => {
setTimeout(() => {
setShow(true);
}, 0);
}, []);
if (!show) {
return null;
}
return <input onChange={fn} ref={inputRef}/>;
}
Horizon.render(<div><Dialog><App /></Dialog>, container);
showPortalInput(true);
jest.advanceTimersToNextTimer();
dispatchChangeEvent(inputRef.current, 'test');
expect(fn).toHaveBeenCalledTimes(1);
});
}); });

View File

@ -0,0 +1,9 @@
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
*/
export default function dispatchChangeEvent(inputEle, value) {
const nativeInputSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, 'value').set;
nativeInputSetter.call(inputEle, value);
inputEle.dispatchEvent(new Event('input', { bubbles: true}));
}