如何解码nocklogging的响应

如何特别解码/解压诺克logging器产生的输出,所以我们可以看到作为文本的响应? 我想我们不明白,如果回应是gzipped和/或编码

当我们把它加载到nock中时,这个对象就能find,我们的testing正如我们所期望的那样运行。 要查看API生成的内容,我们必须将日志logging置于实现文件中。

我们正在录制和保存JSON的回复:

nock.recorder.rec({output_objects: true, dont_print: true}); JSON.stringify(nock.recorder.play()) 

我们的文件如下所示:

[ { "scope": "https://some.api.com:443", "method": "POST", "path": "/auth?key=some_key", "body": { "logonId": "user@api.com", "logonPassword": "secret" }, "status": 400, "response": [ "1f8b0800000000000000458cbd6ac34010067b3fc5c735691263bb741344ec42f827420a492916692d1d9cb461f71c218cdf3d97266e6786b92d00c7aaa205290d1c59cd6d71bb3fff8b376939a1cd6abd7ac003cf89b97a5f96757efecc8ef9aede9fb2fc586455f5f55eeedca33db119757f0f5704266334a2ca4d44ec19170941263f76f06657b62dd6cb2af919ec9357cc7255f0cb403e4014df643689b6687d3b3e450c149b1e534f1113a3a71f868cb8f8c04b7ca48b8fa08efcf8ea16f75fa1776d91ee000000" ], "headers": { "cache-control": "no-store, no-cache, must-revalidate", "content-encoding": "gzip", "content-type": "application/json", "transfer-encoding": "chunked", "connection": "Close" } } ]

来自http请求的响应将作为content-encoding头指示的gzip压缩数据返回。 Nock将这个数据保存为一个hex编码的缓冲string

您可以使用以下工具将这些卡带转换成json:

 var zlib = require('zlib'); var fs = require('fs'); var argv = process.argv.slice(2); var path = require('path'); var filename = path.resolve(argv[0]); var file = fs.readFileSync(filename, { encoding: 'utf8' }); var cassettes = JSON.parse(file); cassettes.forEach(function (cassette) { if (cassette.headers['content-encoding'] !== 'gzip') { return; } var response = new Buffer(cassette.response[0], 'hex'); var contents = zlib.gunzipSync(response).toString('utf8'); cassette.response = JSON.parse(contents); delete cassette.headers['content-encoding']; }); fs.writeFileSync(filename, JSON.stringify(cassettes, null, 2), { encoding: 'utf8' }); 

请注意,这将覆盖原始磁带,将所有的gzip请求转换成json。 另外请注意,我没有检查内容types,所以如果您的回复不是json,则需要进行调整。