Я пытаюсь протестировать простую функцию, которая генерирует случайное имя, используя криптографическую библиотеку nodejs.Я использую sinon, чтобы заглушить вызов метода в обратном вызове pseudoRandomBytes, но заглушка, кажется, не вызывается.Пример:
getFileName.js
const crypto = require('crypto');
module.exports = (req, file, cb) => {
crypto.pseudoRandomBytes(32, (err, raw) => {
try{
cb(err, err ? undefined : crypto.createHash('MD5').update(raw).digest('hex'));
} catch(err) {
cb(err);
}
});
};
Test (выполняется в mocha)
it('Crypto Error: createHash', function () {
const crypto = require('crypto');
const expectedError = new Error('stub error occurred');
let cryptoStub = sinon.stub(crypto, 'createHash').throws(expectedError);
let callback = sinon.spy();
getFileName(null, null, callback);
cryptoStub.restore();
sinon.assert.calledWith(callback, expectedError);
});
Я ожидаю, что вышеприведенный тест сгенерирует после вызова createHash
.Если я переместу вызов crypto.createHash
за пределы обратного вызова (до вызова pseudoRandomNumber), он будет работать нормально.Я немного новичок, поэтому мое базовое понимание того, что делают sinon и nodejs, может быть совершенно неверным.Любая помощь будет высоко ценится.