【问题标题】:Nock + multipart form data = No match for requestNock + 多部分表单数据 = 请求不匹配
【发布时间】:2015-11-21 11:01:53
【问题描述】:

我在使用Nock 测试我的节点应用程序时遇到问题。我通过nock.recorder.rec 记录所有请求,但其中有多部分请求。我使用form-data。当我使用函数form.append 时,此模块将边界 放在请求正文中。问题是边界总是不同的,当我使用记录的数据运行测试时,Nock 找不到请求的匹配项(因为请求正文中的 boyoudary 不是记录时的内容)。可以做什么?对不起我的英语不好。

【问题讨论】:

  • 我可以做一个肮脏的黑客:在调用form.append方法之前写form._boundary = 'myboundary'。在这种情况下,边界始终是静态的并且将进行测试。但是静态边界可能是一个糟糕的决定..也许手动生成某些算法的边界?

标签: node.js form-data boundary nock


【解决方案1】:

另一种解决方案是使用RegExp:

nock(baseUrl)
    .post(`/url', /form-data; name="field"[^]*value/m)
    .reply(200, 'some data');

注意

  • 正则表达式中输入字符 (^) 的开头(因为表单数据可能包含换行符)
  • multiline
  • m 标志
  • 上例对应:form.append('field', value);
  • 有关真实示例,请参阅here。这还展示了如何使用 RegExp 类在正则表达式中使用变量。

【讨论】:

    【解决方案2】:

    我遇到了类似的问题。您可以做的是将第二个参数用作函数,并匹配您尝试作为表单数据发送的对象。示例:

    nock('localhost')
      .post('/url', function(body) {
        return JSON.stringify(body) === JSON.stringify(params);
      })
      .reply(200, 'some data');
    

    更多信息请参见此处的文档:https://github.com/pgte/nock#specifying-request-body

    【讨论】:

      猜你喜欢
      • 2021-02-03
      • 2018-07-18
      • 2020-08-09
      • 2012-11-27
      • 2016-12-17
      • 2012-03-16
      • 2016-11-11
      • 2013-02-12
      • 2018-07-02
      相关资源
      最近更新 更多