javascript - JSON.parse(string) 的匹配器 - 如何在运行匹配器之前调用 lambda?

标签 javascript jasmine jestjs

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

但是,这个测试有点脆弱,因为如果对象结构发生变化,人们就只能尝试查看两个巨大的字符串并看看有什么不同。

相反,我想改进此测试,以检查调用 JSON.parse() 生成的对象是否相当于另一个对象,并且可能将其与检查某些对象子属性链接起来。

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

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

测试这个的最佳方法是什么?

最佳答案

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

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

关于javascript - JSON.parse(string) 的匹配器 - 如何在运行匹配器之前调用 lambda?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57480155/

相关文章:

angularjs - 如何在测试自定义 AngularJS 提供程序时注入(inject) $window?

angular - 来自 observable : testing with Jasmine marbles 的特殊结果

javascript - 如何异步填充选择控件?

javascript for 循环并放入一个新数组中

javascript - 加载 gridstore 时出现“无数据可显示”消息 Ext JS

c# - 序列化包含数组的对象

javascript - 如何提供模拟文件来更改 <input type ='file' > 的事件以进行单元测试

jestjs - 无法模拟 createQueryBuilder 函数 typeorm Nestjs Jest

node.js - 使用 Jest 测试 firebase 函数时的 Flakey 测试

jestjs - 如何在 Cypress 中 stub 节点模块?