我很想在这里寻求帮助。我正在尝试以开玩笑的方式测试功能,但我只能坚持一件事。当我尝试模拟提取请求时,出现此错误:
<table className="table table table-bordered table-striped" id="tableBorder">
<thead className="tableTransform">
<tr>
{features.map(feature => (
<th key={feature.featureName} style={{ color: "white" }}>
<Link className="push" to={{pathname:"/FeaturesPage", aboutProps: { id: feature.featureID} }} >
{feature.featureName}
</Link></th>
))}
</tr>
</thead>
<tbody>
{["featureTechDescription", "sourceSystem", "sampleValues", "featureActiveFlag",
"featureCreatedDate", "featureEndDate", "dateLoadTimeStamp", "dateUpdateTimeStamp"].map(
key => (
<tr key={key}>
{features.map(feature => (
<td key={feature.featureName}>
{feature[key]}</td>
))}
</tr>
)
)}
</tbody>
</table>
我要测试的功能是这样的:
TypeError: Cannot read property 'json' of undefined
我要运行的测试是这样:
const updateUI = async () =>{
const res = await fetch('/sentiment');
console.log(res);
try {
console.log(res.data)
const allData = await res.json();
console.log(allData)
document.getElementById("polarity").innerHTML = allData.polarity;
document.getElementById("polarityConfidence").innerHTML = allData.polarity_confidence;
document.getElementById("subjectivity").innerHTML = allData.polarity;
document.getElementById("subjectivityConfidence").innerHTML = allData.polarity_confidence;
return allData;
}catch(error){
console.log('error')
}
};
export { updateUI }
我真的不知道从这里去哪里。为什么不获取json对象?是否因为我的updateUI函数在函数的try {}部分中调用了json对象?如果是这种情况,我该如何测试?
答案 0 :(得分:0)
我在这里看到两个问题
在您的测试中,您正在传递类似const res = await updateUI('/sentiment');
这样的字符串,因为updateUI不需要任何参数,所以这无关紧要。
在下一行中,您正在做res.json()
,因为从您的实际方法开始,您将仅返回响应。在测试中,您不需要执行.json()
。这是因为没有json函数而导致未定义的原因。
答案 1 :(得分:0)
我就是这样做的。可以在 codegrepper
上找到更多信息 <块引用>确保 Promise.resolve
使用得当,并且模拟数据和 api 数据都具有相同的格式。
const mockFetchUserData = (data) => {
return global.fetch = jest.fn().mockImplementation(() =>
Promise.resolve({
json: () => data
})
)
}
it('Display empty list of users', async () => {
// Data can be empty array or array of data
await mockFetchUserData([])
await act(async () =>
render(
<Router>
<User />
</Router>
)
})
const findSearchButtonText = screen.getByText('Search') // is search button rendered
expect(findSearchButtonText.type).toBe('submit') // is type submit
}