gpt4 book ai didi

javascript - Mocha 在测试 node.crypto 函数时抛出错误

转载 作者:行者123 更新时间:2023-12-03 05:30:56 25 4
gpt4 key购买 nike

我正在尝试测试我的密码哈希函数,但由于某些 TypeError 错误,我不断遇到失败。

我确信该函数可以工作,因为我尝试从其他文件调用它,并且得到了预期的结果,没有任何错误。

这是函数:

    exports.hashPassword = (password) => {
return new Promise((resolve, reject) => {

crypto.randomBytes(salt_length, (err, buf) => {
if (err) reject(err);

const salt = buf.toString('base64');

crypto.pbkdf2(password, salt, iterations, keylen, digest, (err, key) => {
if (err) reject(err);

const hashedPassword = '{X-PBKDF2}:'+digest+':'+keylenB64+':'+iterationsB64+':'+salt+':'+key.toString('base64');
resolve(hashedPassword);
});
});
});
};

这是失败的测试:

    describe('users', () => {

describe('utils', () => {

it('should hash a password', (done) => {

const password = 'secret';

utils.hashPassword('secret')
.then((hash) => {
console.log('Hash: '+ hash);
done();
})
.catch((err) => {
console.log(err);
done(err);
});
});
});
});

这就是“错误”:

1 failing

1) users utils should hash a password:
TypeError: size must be a number >= 0
at Promise (api\paths\users\utils.js:24:12)
at Object.exports.hashPassword (api\paths\users\utils.js:14:10)
at Context.it (api\paths\users\utils.test.js:30:13)

有人知道为什么吗?

我正在使用 mochashould 并在 node 上进行开发。

最佳答案

感谢pietrovismara这为我指明了解决方案。

问题是 salt_length 是一个字符串而不是数字。我正在打印参数,我可以看到它们是“正确的”,但显然不是正确的类型(因此我猜是 TypeError...)

我将参数保存在 .env 文件中,并使用 dotenv 包读取它们,该包显然将它们读取为简单字符串(正如它应该的那样)...当我“测试”另一个文件中的函数时它起作用的原因是,在这种情况下我没有使用从 .env 读取的参数,我有类似的东西:

const salt_length = process.env.SALT_LENGTH || 128;

Mocha 使用 .env 值(字符串)是正确的,但是当我摆弄该文件时,我没有加载这些环境变量。

今天我学到了一些东西,那就是我应该累了就回家,而不是继续充电,看不到眼前的东西。

此外,由于 mocha 支持 Promise,“正确”的测试用例应该是(使用 should):

describe('users', () => {

describe('utils', () => {

it('should hash a password', () => {
return utils.hashPassword('secret').should.be.fulfilled();
});

});
});

关于javascript - Mocha 在测试 node.crypto 函数时抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40950480/

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