[英]Best practice to test propTypes with jest + enzyme + react-redux?
[英]React-Redux: Jest failing to test async action (Always pass)
我正在使用 Jest 为一些 Redux 操作实现单元测试。
然而,出于某种原因,这个测试用例永远不会失败。
该操作的汇总版本如下所示:
export function attachFile(file) {
return (dispatch, getState) => {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => {
dispatch({
type: actionTypes.ATTACH_FILE_DONE,
file: {
content: reader.result,
size: file.size,
mimeType: file.type,
name: file.name,
},
});
resolve();
};
reader.onerror = (error) => {
const errorMessage = `Error reading file: ${file.name}: ${error}`;
dispatch({
type: actionTypes.ATTACH_FILE_FAIL,
errorMessage,
});
reject(errorMessage);
};
reader.readAsDataURL(file);
});
};
}
测试它的笑话代码:
store.dispatch(attachFile(file)).then(() => {
console.log('ACTUAL ACTIONS:', store.getActions());
console.log('EXPECTED ACTIONS:', expectedActions);
expect(store.getActions()).toEqual(expectedActions);
})
记录信息显示值不相等,但是, Jest始终通过此测试。 我什至尝试添加
fail('Just fail')
但是测试仍然通过,即使数据完全不同或强制失败。
我环顾四周以查看类似的代码,但我看不到我的代码有任何有意义的差异,例如这个
我还注释掉了 Promise 中的所有代码,并强制它在测试代码上失败......仍然通过。
知道可能有什么问题吗?
一旦您的代码完成执行,就认为测试已经完成。
您需要告诉 Jest 等到您的承诺兑现。
您可以通过将参数(让我们称之为done
)传递给您的test|it
函数来done
这一点,这样,Jest 将等到done
被调用。
所以基本上是这样的:
test('the data is peanut butter', done => {
function callback(data) {
expect(data).toBe('peanut butter');
done();
}
fetchData(callback);
});
对于您的示例,请在您的except
之后调用done
:
{
...
expect(store.getActions()).toEqual(expectedActions);
done();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.