hellboy hellboy - 5 months ago 11
Node.js Question

Asserting files that have the same content

I am using mocha/supertest/should.js to test my Rest Service

GET /files/<hash>
returns file as stream.

How can I assert in should.js that file contents are the same?

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();
});
});

Answer

You have 3 solutions:

First:

Compare the result strings

tmpBuf.toString() === testBuf.toString();

Second:

Using a loop to read the buffers byte by byte

var index = 0,
    length = tmpBuf.length,
    match = true;

while (index < length) {
    if (tmpBuf[index] === testBuf[index]) {
        index++;
    } else {
        match = false;
        break;
    }
}

match; // true -> contents are the same, false -> otherwise

Third:

Using a third-party module like buffertools and buffertools.compare(buffer, buffer|string) method.