如何在笑话测试中模拟 json.parse()

Posted

技术标签:

【中文标题】如何在笑话测试中模拟 json.parse()【英文标题】:how to mock json.parse() in jest tests 【发布时间】:2019-04-13 04:39:35 【问题描述】:

我的代码中有一个 try/catch,当代码落入 catch 部分时,它会遇到 JSON.parse()

catch(err)
    JSON.parse(err.message)

代码正在运行,但测试失败。测试只是断言尝试中发生了一些事情

try 
   popUp.method(mockedUrl)

测试只是断言该方法已被调用,但它失败了,因为在JSON.parse() 阶段发生了一些事情。只是想知道如何将其存根,以便它知道我传递给 json 的内容?

【问题讨论】:

你可以参考一下。 ***.com/questions/39193533/… 这可能是 XY 问题。通常你需要模拟传递给 JSON.parse 的数据,而不是 JSON.parse 本身。 @estus 好的。但是当我在 catch 块中注销 err 时,它甚至没有向我显示任何内容。当我 console.log('hello') 显示时。这让我很困惑。猜它不知道err 是什么 @Xanax 使用的是 sinon 而不是开玩笑 我不确定你的情况。您想模拟它以用于测试目的还是调试目的?您在哪里记录错误以及不显示的错误是什么?它完全是一个对象吗? JSON.parse(err.message) 有什么用途?它什么也没做。请发布您正在测试的代码和您的测试,这样您的案例可能会更清楚。您可以将 JSON.parse 模拟为任何其他方法,但有可能这是错误的决定。 【参考方案1】:

你可以模拟 JSON.parse 实现

JSON.parse = jest.fn().mockImplementationOnce(() => 
  // return your what your code is returning.
);

一旦您不应该测试 javascript 内置对象:JSON,这就足够了。所以你返回你的代码对它的期望,其余的应该没问题。

【讨论】:

以上是关于如何在笑话测试中模拟 json.parse()的主要内容,如果未能解决你的问题,请参考以下文章

如何在 javascript 中模拟内部 JSON 对象?

笑话:如何取消模拟 index.js 文件中列出的组件?

笑话:当同一个模块也有命名导出时,如何模拟默认导出组件?

如何使用酶、笑话和反应测试材料设计事件监听器

如何从 VSCode 中的多个位置运行笑话测试

我有一个笑话我如何导入到多个测试文件