gpt4 book ai didi

javascript - 回调中方法的 Sinon 加密 stub

转载 作者:搜寻专家 更新时间:2023-11-01 00:48:27 24 4
gpt4 key购买 nike

我正在尝试测试一个使用 nodejs 加密库生成随机名称的简单函数。我正在使用 sinon 在 pseudoRandomBytes 的回调中 stub 一个方法调用,但 stub 似乎没有被调用。示例:

获取文件名.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);
}
});
};

测试(在 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 正在做什么的基本理解可能是完全错误的。任何帮助将不胜感激。

最佳答案

createHash() 似乎没有被调用的原因是因为异步函数导致您在回调调用完成之前进行断言。

使用 async/await 的 Promise 将起作用。另一种不涉及更改模块以使用 promise 的方法是在回调中进行断言。

it('Crypto Error: createHash', function (done) {
const crypto = require('crypto');
const expectedError = new Error('stub error occurred');
let cryptoStub = sinon.stub(crypto, 'createHash').throws(expectedError);

getFileName(null, null, function (err, hash) {
sinon.assert.match(err, expectedError);
cryptoStub.restore();
done();
});
});

通过这种方式,您可以检查调用的回调是否出现预期的错误。确认这一点的一种方法是,您可以将第 4 行更改为 .throws('some other error'),测试将失败。

关于javascript - 回调中方法的 Sinon 加密 stub ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55506331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com