我用的是jest和typescript。在我的组件中,有一部分在第一次加载组件时由于usestate而被隐藏。在我们的应用程序中运行函数后,它的状态变为true,隐藏的div变为可见。
我想为这个组件写100%的行覆盖率,但似乎我不能模拟usestate我做错了什么?
以下是最小化的组件(我删除了未使用的部分以使其更具可读性):
import React, { useEffect, useRef, useState, FC } from 'react'
import EmailEditor from 'react-email-editor'
import CustomButton from '../customButton/CustomButton'
type ICustomEmailEditor = {
customClass?: string
setFieldValue?: any
json?: any
jsonTemplate?: string
}
const CustomEmailEditor: FC<ICustomEmailEditor> = (props) => {
const { t } = useTranslation()
const emailEditorRef = useRef(null)
const [isEditorLoading, setIsEditorLoading] = useState<boolean>(true)
const [previewText, setPreviewText] = useState<string>(t('CAMPAIGN.SHOW_PREVIEW'))
const onReady = () => {
emailEditorRef.current.addEventListener('design:updated', async (data: Event) => {
const value: any = await exportHtml('save')
props.setFieldValue('message', value.html)
props.setFieldValue('json_template', JSON.stringify(value.design))
})
setIsEditorLoading(false)
}
return (
<div className="email-container">
{!isEditorLoading ? (
<div className="email-buttons-wrapper">
<CustomButton
type="button"
holder={t('CAMPAIGN.EXPORT_HTML')}
/>
<CustomButton type="button" holder={previewText} />
</div>
) : null}
<EmailEditor ref={emailEditorRef} onReady={onReady} />
</div>
)
}
export default CustomEmailEditor
字符串
电子邮件编辑器是无关紧要的,因为还有其他的行覆盖率测试的其余部分的项目,我正在努力与使用usestate。
1条答案
按热度按时间zlhcx6iw1#
你可以尝试一个异步测试,在这里你可以
await waitFor(() => {getElementsByClassName("email-buttons-wrapper").toBeInTheDocument()})
我记不清具体的语法了,但是react测试文档会对你有所帮助。
如果EmailEditor最终将加载,那么它应该触发onReady函数并显示div。