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值)
我已经根据文档和教程尝试了不同的解决方案组合,但有两件事让我感到困惑:
我要mock的方法只有在配置库后才会暴露
contentful
似乎是一个 Node.js 模块,因此在某些解决方案中我得到 'failed to get mock metadata' 错误
有什么简单明了的方法可以解决这个问题?
你可以试试
jest.mock('./contentfulConfig', ()=>({
...jest.requireActual('./contentfulConfig'),
getEntries: jest.fn()
//other functions you want
}))
这将允许您模拟要在库中测试的所有函数
我在 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值)
我已经根据文档和教程尝试了不同的解决方案组合,但有两件事让我感到困惑:
我要mock的方法只有在配置库后才会暴露
contentful
似乎是一个 Node.js 模块,因此在某些解决方案中我得到 'failed to get mock metadata' 错误
有什么简单明了的方法可以解决这个问题?
你可以试试
jest.mock('./contentfulConfig', ()=>({
...jest.requireActual('./contentfulConfig'),
getEntries: jest.fn()
//other functions you want
}))
这将允许您模拟要在库中测试的所有函数