【发布时间】:2020-11-08 10:01:11
【问题描述】:
我正在尝试使用 RTL 测试组件,该组件使用 customEvent 来触发显示。给定这样的组件:
const Alerts = () => {
const [alerts, setAlerts] = useState([]);
const addAlert = (body, type = 'info', timeout = 7500) => {
const key = nextIndex++;
setAlerts([
...alerts,
{ key, body, type },
]);
// Set a timer to remove the alert.
setTimeout(() => {
setAlerts(alerts.filter((alert) => alert.key !== key));
}, timeout);
};
document.addEventListener(
'newalert',
({ details:
{
body = '',
type = '',
timeout = 1000
} = {}
}) => {
addAlert(body, type, timeout);
});
return (
<>
{alerts.map((alert) => <Alert {...alert} />)}
</>
);
};
我正在尝试这样测试:
test('An alert is rendered on a newalert event', () => {
render(<Alerts />);
fireEvent(
document,
createEvent('newalert', document,
{
details: {
body: 'Hello World!',
type: 'info',
timeout: 1000,
}
})
);
expect(screen.getByText('Hello world'));
});
它正在按预期触发自定义事件,但是没有任何属性(详细信息、正文、类型或超时)被传递给事件。我错过了什么?
【问题讨论】:
-
这里有一个错字,应该是
detail而不是详细信息,但是修复它并不能解决问题。
标签: reactjs react-testing-library custom-events