我正在尝试为使用node-forge的代码编写一个测试。由于某种原因,当我调用forge.md.sha256.create();
时,测试挂起:
import forge from "node-forge";
const privateKey = "foo";
const storagePin = "bar";
const md = forge.md.sha256.create();
md.update(privateKey + storagePin);
const metadataKey = md.digest().toHex();
作为一种变通方法,我试图模拟该方法的实现,以便它只返回一个硬编码的字符串:
import forge from "node-forge";
jest.mock("node-forge");
forge.mockImplementation(() => {
return {
md: {
sha256: {
create: () => {
return {
update: () => {},
digest: () => {
toHex: () => "foobar";
}
};
}
}
}
};
});
// tests
然而,我的测试一直失败:
TypeError: _nodeForge2.default.mockImplementation is not a function
at Object.<anonymous> (src/redux/epics/authentication-epic.test.js:20:27)
at new Promise (<anonymous>)
at Promise.resolve.then.el (node_modules/p-map/index.js:46:16)
at processTicksAndRejections (internal/process/next_tick.js:81:5)
奇怪的是,当我试图模拟自己的文件时,这种策略非常有效。
嘲笑第三方库的正确方法是什么?
2条答案
按热度按时间jc3wubiy1#
你试过这样吗?更多关于这一点在这里。
fdx2calv2#
default
导出不是一个函数,所以Jest
自动模拟不会用模拟函数替换默认导出......但
default
导出是对象。探索ES6:
...虽然不能更改导入的值,但可以更改它们引用的对象。
因此,您可以将对象上的
md
属性设置为您的mock: