首页 > 解决方案 > JSON.parse(string) 的匹配器 - 如何在运行匹配器之前调用 lambda?

问题描述

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

然而,这个测试有点脆弱,因为如果对象结构发生变化,就会试图查看两个巨大的字符串,看看有什么不同。

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

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

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

对此进行测试的最佳方法是什么?

标签: javascriptjasminejestjs

解决方案


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

请参阅https://www.npmjs.com/package/nock


推荐阅读