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