Jest - 模拟需要预先配置的节点模块

Jest - mocking a node module that requires prior configuration

我在 React 应用程序中使用 Contentful SDK,这需要配置身份验证。

我有一个 contentfulConfig.js 文件,如下所示:

import { createClient } from 'contentful';

export default createClient({
    space: SPACE_ID,
    accessToken: ACCESS_TOKEN,
})

然后我将该配置的实例导入其他文件并使用它公开的不同 API 方法,如下所示:

import contentful from './contentfulConfig';

...

contentful.getEntries(...).then(...)

为了测试一些通过上面获取数据的组件,我想模拟其中一些API方法的结果,例如getEntries

(我的mocking需求很简单:我只想mock这些方法的resolution/rejection值)

我已经根据文档和教程尝试了不同的解决方案组合,但有两件事让我感到困惑:

  1. 我要mock的方法只有在配置库后才会暴露

  2. contentful 似乎是一个 Node.js 模块,因此在某些解决方案中我得到 'failed to get mock metadata' 错误

有什么简单明了的方法可以解决这个问题?

你可以试试

 jest.mock('./contentfulConfig', ()=>({
   ...jest.requireActual('./contentfulConfig'),
   getEntries: jest.fn()
   //other functions you want
}))

这将允许您模拟要在库中测试的所有函数