对Favicon静态图像的哈希进行Mocha测试失败

Dan*_*ohn 3 favicon sha mocha.js node.js

我正在尝试使用mocha,request和SHA1哈希来编写集成测试,以确认Express提供的图标与文件系统上的图标相同。我得到两个不同的哈希值,不知道为什么。编码是否有可能改变?

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0" // Avoids DEPTH_ZERO_SELF_SIGNED_CERT error for self-signed certs
var request = require("request");
var crypto = require('crypto');
var fs = require('fs');
var favicon = crypto.createHash('sha1').update(fs.readFileSync(__dirname + '/../../public/img/favicon.ico')).digest('hex');
var app = require("../../server.js");
var expect = require('expect.js');

describe("Static tests", function () {
    it("responds successfully", function (done) {
        request.get("https://localhost:" + process.env.PORT + "/favicon.ico", function (err, res, body) {
            // console.log(res)
            expect(res.statusCode).to.be(200);
            done();
        });
    });

    it("serves out the file correctly", function (done) {
        request.get("https://localhost:" + process.env.PORT + "/favicon.ico", function (err, res, body) {
            // console.log(res)
            expect(crypto.createHash('sha1').update(body).digest('hex')).to.be(favicon);
            done();
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

测试1通过,然后得到:“ 1)服务器静态测试将文件错误填满:预期'b09865f78dae40afa5f31503c208f5474e1d76a9'等于'd3e242e289b401c18d6e96526f586abf06385108'

有什么想法为什么同一个图标在通过HTTP发送与读取文件系统时可能在散列上有所不同?

Eri*_*thy 5

假设您使用的是来自npm 的请求模块,则应验证为body参数接收的对象的类型为Buffer。在查看请求模块的源代码时,我怀疑您得到了一个String替代。当需要请求时,您可以尝试执行以下操作:

var request = require("request").defaults({ encoding: null });
Run Code Online (Sandbox Code Playgroud)

这应该告诉请求模块Buffer默认情况下您想要一个对象。