javascript - 使用 Jest 对仅在函数存在时调用函数的 JavaScript 进行单元测试
问题描述
对于这样的代码:
export const addMediaQueryEventListener = (media, onChange) => {
if (root.matchMedia) {
const mediaQueryList = root.matchMedia(media);
...
您如何使用 Jest 测试两个代码“分支”,即何时root.matchMedia
为假以及何时存在?
我可以模拟matchMedia
成为一个函数并断言它被称为 OK。但是要反过来测试以获得 100% 的测试覆盖率,我需要模拟matchMedia
为虚假,但还要断言它没有被作为函数调用。
有没有办法模拟该属性 matchMedia
是虚假的,同时也作为一个函数进行监视matchMedia
?或者是否需要重写此函数以使其可测试?
解决方案
我在评论中遵循了@Taplar 的建议(再次感谢!)并像这样解决了它:
describe('when matchMedia is unsupported', () => {
beforeEach(() => {
root.matchMedia = undefined;
});
test('it does not error', () => {
addMediaQueryEventListener(media, onChange);
});
});
});
我开始思考要做出什么断言,但只需调用函数就足够了,因为如果它尝试undefined
作为函数调用,那么它会出错并导致测试失败。这使测试覆盖率达到了预期的 100%。
推荐阅读
- angular - 版本 12 的 Angular 应用程序中的编译错误尝试使用 Angular 10 中内置的 Angular 库
- assembly - 在程序集中打印文本
- reactjs - 当函数是抽象的时,在函数内部引用类函数。(无法读取未定义的属性)
- ios - Swift FCM 向特定令牌发送通知在后台不工作
- c++ - 在 C++ 中使用 Liebniz 公式逼近 Pi
- python - 使用 if 和 else 语句为两个模型流水线 Python
- port - 如何配置snort 3来检测namp的端口扫描?
- html - 自定义 Html 到 pdf 转换的表格分页
- javascript - Firefox 和 Chrome 的内容脚本差异:无法获取 API 数据
- object - 从任务中处理 libvlcsharp 对象的内存访问冲突