我正在编写与 PayPal 经典 API 交互的代码。此交互的第一部分是向 PayPal 发送请求并从他们那里获取令牌。为此,我使用简单的 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'});
但后来我得到:
未捕获的错误:EOF 后的 stream.push()
看起来模拟响应中没有发送任何数据。