Невозможно имитировать функцию hashSyncJavascript

Форум по Javascript
Ответить
Anonymous
 Невозможно имитировать функцию hashSync

Сообщение Anonymous »

У меня проблема с Витестом (в ТС). А именно, издевательство над хэш-функциями не работает должным образом. У меня есть два метода, которые обрабатывают хеширование и сравнение:

Код: Выделить всё

hash.ts:
import * as bcrypt from 'bcrypt';

const SALT_ROUNDS = 10;

export const hashPassword = (password: string) =>
bcrypt.hashSync(password, bcrypt.genSaltSync(SALT_ROUNDS));

export const verifyPassword = (
password: string,
hashedPassword: string,
) => bcrypt.compareSync(password, hashedPassword);

Я хотел подготовиться к этому модульному тесту в Vitest:

Код: Выделить всё

hash-password.spec.ts:
import { hashPassword } from '../../src/services/hash.js';
import * as bcrypt from 'bcrypt';

vi.mock('bcrypt', () => ({
genSaltSync: vi.fn(() => 10),
hashSync: vi.fn(() => 'mockHashedPassword'),
}));
describe('hashPassword', () => {
it('should hash the password correctly', () => {
const hashedPassword = hashPassword('password123');

expect(bcrypt.genSaltSync).toHaveBeenCalledWith(10);
expect(bcrypt.hashSync).toHaveBeenCalledWith('password123', 10);

expect(hashedPassword).toBe('mockHashedPassword');
});
});

Однако существует некоторая проблема с фиктивной функцией hashSync.
Я думал, что это проблема импорта. Я заменил импорт на

Код: Выделить всё

import bcrypt from 'bcrypt';
в

Код: Выделить всё

import * as bcrypt from 'bcrypt';
потому что я подозревал какие-то проблемы с экспортом из этой библиотеки. Однако след слеп.
Однако я постоянно получаю эту ошибку:

Код: Выделить всё

 FAIL test/ut/hash-password.spec.ts [ test/ut/hash-password.spec.ts ].
TypeError: unable to read undefined property (read ‘hashSync’)
❯ Module.hashPassword src/services/hash.js:141:20
139| var SALT_ROUNDS = 10;
140| var hashPassword = (password) =>
141| bcrypt_1.default.hashSync(
| ^
142| password,
143| bcrypt_1.default.genSaltSync(SALT_ROUNDS),
❯ test/ut/hash-password.spec.ts:10:13
Что может быть причиной этого?

Подробнее здесь: https://stackoverflow.com/questions/793 ... c-function
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»