【问题标题】:Matcher for JSON.parse(string) - how to call a lambda before running the matcher?JSON.parse(string) 的匹配器 - 如何在运行匹配器之前调用 lambda?
【发布时间】:2019-08-14 01:14:07
【问题描述】:

我有一个检查 fetch() 调用的字符串主体的单元测试。

但是,此测试有点脆弱,因为如果对象结构发生变化,则需要尝试查看两个巨大的字符串并查看有什么不同。

相反,我想改进此测试以检查通过调用 JSON.parse() 生成的对象是否等同于另一个对象,并可能通过检查某些对象子属性来链接它。

    expect(global.fetch).toHaveBeenCalledWith(
    'http://localhost:8080/api',
    {
      "body": JSON.stringify(expected_body),
      "headers": {
        "Content-Type": "application/json"                                             
      },
      "method": "POST"                                                                 
    },                                                                                 
  );

请注意,这并不是要求进行深度等于比较检查。我的问题实际上是关于如何在运行匹配器之前调用 lambda 函数。

最好的测试方法是什么?

【问题讨论】:

  • @str 这与比较深度相等的对象不同。这确实是一个关于如何在运行匹配器之前调用 lambda 的问题。
  • 那你应该澄清一下。仅仅改变标题是不够的。

标签: javascript jasmine jestjs


【解决方案1】:

您应该将 http 调用抽象为一个单独的模块或函数,该模块或函数返回您定义的对象。该对象将使用来自 Lambda 响应的解析 JSON 创建。然后,您可以使用像 nock 这样的库在单元测试中模拟您的 Lambda 调用,并为成功和失败场景创建测试用例。

https://www.npmjs.com/package/nock

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 2018-08-22
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多