尝试编写一个测试(mocha)来检查从我的 api 端点返回的 PDF 是否包含正确的数据并且看起来应该。PDF 在服务器上生成。手动命中端点时它返回“正确”,但想编写一些测试。我上传了一个示例“正确”PDF 到我的测试套件,我可以用鹰嘴豆泥 js 解析它并提取必要的方面进行比较。
我想向我的端点(使用超级代理)发出请求,然后将响应(pdf)通过管道传输到临时 pdf 中。然后我将解析两个 PDF(上传的完美文件和从我的端点返回的文件)并确保它们匹配。
我的请求代码:
it('Should look like the proposed pdf', function (done) {
request(app)
.get(url) //var that sets the path earlier
.expect(200)
.end(function (err, res) {
if(err) return done(err);
var writeStream = fs.createWriteStream('./test/materials/tmp.pdf');
writeStream.pipe(res); //ERROR can't pipe
writeStream.on('end', function() {
console.log('complete');
done();
})
});
});
当我运行测试时,我得到:未捕获的错误:无法管道。不可读。我对节点很陌生,所以我不确定是什么导致了错误。当我安慰 res 时,我得到一个大的二进制编码的混乱,所以也许这就是问题所在?我尝试了几件事 - 使用鹰嘴豆泥 pdfWriter,尝试用
新缓冲区(res,'base64')
等等......但仍然没有运气。我相信我已经为这些操作安装了所有必要的软件包,这似乎是一个管道/解码/超级代理问题。谢谢您的帮助!
编辑:我误解了管道。您可以简单地将响应写入文件:
fs.writeFile('./test/materials/test_tmp.pdf', new Buffer(res.text, 'ascii'));
在这种情况下转换为 ascii。我现在更近了,但仍然挂在编码片上。这将创建一个空白 PDF。当我以崇高的方式观察文件内容时,它们似乎与我要比较的 PDF 相同,但编码不同。有人知道如何匹配原始 PDF 的编码或弄清楚它是如何编码的吗?或者如果这甚至是可能的?我使用 PDFkit 构建 PDF。