问题描述
我正在使用 TypeScript + Node.js + pdfkit 库来创建 PDF 并验证它们是否一致。
然而,当只是创建最基本的 PDF 时,一致性已经失败。这是我的测试。
import {readFileSync,createWriteStream} from "fs";
const PDFDocument = require('pdfkit');
const assert = require('assert').strict;
const fileName = '/tmp/tmp.pdf'
async function makeSimplePDF() {
return new Promise(resolve => {
const stream = createWriteStream(fileName);
const doc = new PDFDocument();
doc.pipe(stream);
doc.end();
stream.on('finish',resolve);
})
}
describe('test that pdfs are consistent',() => {
it('simple pdf test.',async () => {
await makeSimplePDF();
const data: Buffer = readFileSync(fileName);
await makeSimplePDF(); // make PDF again
const data2: Buffer = readFileSync(fileName);
assert.deepStrictEqual(data,data2); // fails!
});
});
两个 Buffer 中的大多数值是相同的,但有一些不是。这里发生了什么?
解决方法
我相信由于创建时间以某种方式被计入缓冲区,因此字节可能略有不同。当我使用 mockdate
(https://www.npmjs.com/package/mockdate) 修复“现在”时,我最终获得了一致的缓冲区。