javascript - Nock - 如何模拟二进制响应

标签 javascript node.js unit-testing paypal nock

我正在编写与 PayPal 经典 API 交互的代码。此交互的第一部分是向 PayPal 发送请求并从他们那里获取 token 。为此,我使用简单的 https 请求:

function makePayPalRequestForToken(options, callback) {

var requestOptions = {
    host: config.paypal.endpoint,
    path: '/nvp?' + qs.stringify(options),
    method: 'GET'
};
var req = https.get(requestOptions, function(res) {
    var data = '';

    res.on('data', function(chunk) {
      data = data + chunk;
    });

    res.on('end', function() {
      callback(null, data);
    });
});

req.on('error', function(e) {
    callback(e);
});

它与 PayPal 沙箱完美配合,但是,现在我想对我的代码进行单元测试,但我不知道如何模拟从 PayPal 获得的响应。

我检查了来自 PayPal 的行响应如下:

<Buffer 54 4f 4b 45 4e 3d 45 43 25 32 64 35 44 53 33 38 35 31 37 4e 4e 36 36 37 34 37 33 4e 26 54 49 4d 45 53 54 41 4d 50 3d 32 30 31 35 25 32 64 30 35 25 32 64 ...>

所以它看起来像二进制数据。我想用 nock 来模拟响应,但我想知道我该怎么做?如何用我的响应的二进制版本做出响应?

我试过这样的:

nock('https://' + config.paypal.endpoint)
                    .filteringPath(function() {
                       return '/';
                     })
                    .get('/')
                    .reply(200, 'myresponse', {'content-type': 'binary'});

但是我得到:

Uncaught Error: stream.push() after EOF

看起来模拟响应中没有发送任何数据。

最佳答案

如果您不知道如何捕获从实际服务器获得的响应并将其复制到 nock 中,请继续阅读 nock's awesome recording capability .

使用nock.recorder.rec() 记录来自服务器的实际响应。使用 nock.recorder.play() 获取结果。它应该是一个可以字符串化为 JSON 的对象。将 JSON 放入一个文件中,您可以使用 nock.load() 在您的单元测试中使用。

更新:在评论中反复讨论后,发现 OP 面临的具体问题可能会通过将 Node 更新到 v0.12.4 或更高版本来解决。 This commit特别是看起来它可能是相关的。

关于javascript - Nock - 如何模拟二进制响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30407805/

相关文章:

javascript - 尝试部署不和谐机器人时出错

php - yii phpunit 测试覆盖率 View

javascript - 自动完成 : prevent Change event after Select event

java - 未显示 ActionError

node.js - 使用nodejs或express render为swig设置全局变量

c# - 如何为以下返回 json 的 Http 调用添加异常测试

java - 为什么 chrome 驱动程序在 @Before 中不起作用?

javascript - jQuery - 屏幕调整大小更新

javascript - 如何删除 showinfo youtube 播放器?

javascript - 发出发布请求时出现意外的字段错误?