【发布时间】:2022-02-14 07:30:55
【问题描述】:
我正在尝试测试一个使用 Node 的 crypto.createHash 函数的函数。但是,当我尝试使用 jest.mock('crypto', () => ({ createHash: … })) 模拟它时,模拟似乎不起作用。
被测单元同时使用Hash#update 和Hash#digest,所以我试图将它们添加到createHash 模拟中,但是当单元运行时,createHash 返回undefined。
src/hash.ts
import { createHash } from 'crypto';
export function hash(input: string | Uint8Array): Uint8Array {
return new Uint8Array(createHash('sha512').update(input).digest().buffer);
}
src/__test__/hash.test.ts
import { createHash } from 'crypto';
import { hash } from '../hash-node.js';
const mockDigest = jest.fn();
jest.mock('crypto', () => ({
createHash: jest.fn().mockReturnValue({
update: jest.fn().mockReturnThis(),
digest: mockDigest,
}),
}));
describe('hash', () => {
it('uses SHA512', () => {
hash('foo');
expect(createHash).toHaveBeenCalledWith(
expect.stringMatching(/sha512/i),
);
});
});
输出
TypeError: Cannot read properties of undefined (reading 'update')
3 |
4 | export function hash(input: string | Uint8Array): Uint8Array {
> 5 | return new Uint8Array(createHash('sha512').update(input).digest().buffer);
| ^
6 | }
7 |
at hash (src/hash.ts:4:25)
at Object.<anonymous> (src/__test__/hash.test.ts:16:5)
如您所见,createHash 显然返回了 undefined,就好像 .mockReturnValue 没有被调用一样。
我做错了什么?我怎样才能让这个模块模拟工作?
【问题讨论】:
-
它对我来说很好用。你有
__mocks__目录吗? -
没有。此时,只需模块和测试。
标签: node.js typescript unit-testing jestjs