如何检查两个文件是否具有相同的内容?

新手上路,请多包涵

我正在使用 mocha/supertest/should.js 来测试 REST 服务

GET /files/<hash> 将文件作为流返回。

我如何断言 should.js 文件内容相同?

 it('should return file as stream', function (done) {
    var writeStream = fs.createWriteStream('test/fixtures/tmp.json');

    var req = api.get('/files/676dfg1430af3595');
    req.on('end', function(){
       var tmpBuf = fs.readFileSync('test/fixtures/tmp.json');
       var testBuf = fs.readFileSync('test/fixtures/test.json');

       // How to assert with should.js file contents are the same (tmpBuf == testBuf )
       // ...

       done();
    });
});

原文由 hellboy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

令人惊讶的是,没有人建议 Buffer.equals 。这似乎是最快和最简单的方法,并且自 v0.11 以来一直存在。

所以你的代码会变成 tmpBuf.equals(testBuf)

原文由 Max 发布,翻译遵循 CC BY-SA 3.0 许可协议

用于比较大文件,例如断言文件上传时的图像比较缓冲区或字符串与 should.eql 需要很长时间。我建议使用 加密 模块断言缓冲区哈希:

 const buf1Hash = crypto.createHash('sha256').update(buf1).digest();
const buf2Hash = crypto.createHash('sha256').update(buf2).digest();
buf1Hash.should.eql(buf2Hash);

一种更简单的方法是像这样断言缓冲区长度:

 buf1.length.should.eql(buf2.length)

除了使用 shouldjs 作为断言模块,你当然可以使用不同的工具

原文由 smoebody 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题