Bcryptjs.hash返回vitest

问题描述 投票:0回答:1
genSalt

hash
在我的测试文件中生成了一个哈希密码,我使用以下方式嘲笑了这两个函数
bcryptjs
它有效,但我想编写一个测试,以确保用户对象中的密码是哈希密码,所以我想还原
vi.mock("bcryptjs", () => ({
  genSalt: vi.fn(),
  hash: vi.fn(),
}));

genSalt
的原始实现,我在网上找到了一个教程,说我说我应使用
hash

导入Acutal模块,并用原始导入模拟两个函数实现。

vi.importActual
这不起作用,当我记录盐和哈希的密码值时,它们返回了未定义,并且由于某种原因,当我评论时,当我将其记录到控制台时,
it("User is created with a hashed password", async () => { req.body = { name: "foo", email: "[email protected]", password: "1234" }; const genSaltOriginal = (await vi.importActual<any>("bcryptjs")).genSalt; const hashOriginal = (await vi.importActual<any>("bcryptjs")).hash; (genSalt as Mock).mockImplementationOnce(genSaltOriginal); (hash as Mock).mockImplementationOnce(hashOriginal); await createUser(req as Request, res as Response, fakeNext as NextFunction); await new Promise(setImmediate); expect(fakeNext).toHaveBeenCalledWith(new CustomError(undefined, 500, `User save failed\n`)); });
工作并返回实际盐,但是启用了这一行打破了它,这也是哈希生成的代码:

(hash as Mock).mockImplementationOnce(hashOriginal)
    

我设法修复了它,我只是调用了测试中的原始功能,然后嘲笑了
genSalt
let salt; let hashedPassword; try { salt = await genSalt(10); hashedPassword = await hash(password, salt); } catch (err) { next(new CustomError(undefined, 500, `Password hashing failed\n${err}`)); return; }

genSalt
javascript unit-testing hash bcrypt vitest
1个回答
0
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.