Javascript Mock.mockImplementation不是一个函数
我在这里尝试搜索每一个类似的问题,不幸的是没有一个解决方案对我有效 我目前正在尝试模拟模块中的命名导出,如下所示: 模块.tsJavascript Mock.mockImplementation不是一个函数,javascript,reactjs,typescript,unit-testing,jestjs,Javascript,Reactjs,Typescript,Unit Testing,Jestjs,我在这里尝试搜索每一个类似的问题,不幸的是没有一个解决方案对我有效 我目前正在尝试模拟模块中的命名导出,如下所示: 模块.ts 导出函数someFunctionOne(){ //实施 } export const someFunctionTwo=函数( ) { //实施 } 导出常量someFunctionThree=()=>{ //实施 } 导出常量someFunctionFour=()=>{ //实施 } 这里有四个导出,在我的测试中,我需要模拟整个模块: 两个出口应首先模拟到某个值,然
导出函数someFunctionOne(){
//实施
}
export const someFunctionTwo=函数(
) {
//实施
}
导出常量someFunctionThree=()=>{
//实施
}
导出常量someFunctionFour=()=>{
//实施
}
这里有四个导出,在我的测试中,我需要模拟整个模块:
- 两个出口应首先模拟到某个值,然后通过一些测试(但不是全部)重新模拟
- 两个输出只应在最初模拟,不需要重新模拟,因为我在每次测试中都使用相同的模拟
从“React”导入React
从“酶”导入{shall}
从“./Component”导入组件//我正在测试的组件
从“./module”导入{someFunctionOne,someFunctionTwo}
;(像任何人一样开玩笑)。mock('./模块',()=>({
someFunctionOne:jest.fn(),
someFunctionTwo:jest.fn(),
函数三:jest.fn(()=>10),
somefunction4:jest.fn((s)=>s),
}))
;mockReturnValue('some String')
;(someFunction任意两个)。mockReturnValue(false)
描述('组件',()=>{
在每个之前(()=>{
(someFunctionOne as any).mockReset()
(someFunctionTwo as any).mockReset()
})
它('呈现',()=>{
;(someFunctionOne as any).mockImplementationOnce(jest.fn(()=>'some string'))
;(someFunctionsTwo as any).mockImplementationOnce(jest.fn(()=>false))
const shallwreneredmodule=浅(
孩子们在这里发短信
)
expect(shallwrenedermodule).toMatchSnapshot()的
})
//然后,许多其他的测试。。。
})
我还将jest
和babel jest
配置为:
jest.config.js
module.exports={
displayName:“编辑的应用程序”,
setupFilesAfterEnv:['./jest/jest.setup'],
预设:'../jest.preset.js',
转换:{
“^.+\.[tj]sx?$”:[
“巴别塔玩笑”,
{cwd:u dirname,configFile:'./babel jest.config.json'},
],
“\\(svg)$”:“./jest/svg.transform”,
},
moduleFileExtensions:['ts','tsx','js','jsx'],
}
babel jest.config.json
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": "current"
}
}
],
"@babel/preset-typescript",
"@babel/preset-react"
]
}
问题是,无论我从Mock
(mockImplementation
,mockReturnValue
,等等)使用什么方法,我总是以\u moduleName.someFunctionOne.mockReturnValue不是一个函数而告终:
TypeError: _moduleName.someFunctionOne.mockReturnValue is not a function
10 | someFunctionFour: jest.fn((s) => s),
11 | }))
> 12 | ;(someFunctionOne as any).mockReturnValue('some String')
| ^
13 | ;(someFunctionTwo as any).mockReturnValue(false)
console.log
我在这里不知所措,会是什么?
我试过:
- 在原始的
jest.fn()
中使用伪函数,例如jest.fn(()=>{})
- 在原始mock中根本不使用jest mock函数,例如
someFunctionOne:()=>{}
- 不要在第12行中使用
mockReturnValue
,而直接在jest.fn()中模拟它
- 将
mockImplementationOnce
链接到初始模块mock
但是这些都不起作用。我在mockimplementation不是一个函数时遇到了类似的问题,我刚刚意识到我忘记了jest.setup.js文件
您可能已经检查过了,但是如果您在那里添加了模块(jest.mock(“…”),您是否已经在jest.setup.js而不是jest.config.js中查找过了
这为我解决了问题,因为我想模拟服务。这可能是我很容易忽略的东西。模块模拟中应该有\u esModule:true
。但是someFunctionOne
不是undefined
意味着没有应用mock。如果jest.mock未被提升,则可能发生这种情况,这是特定于您的项目的,可能意味着您错误配置了jest和Babel。@EstusFlask我忘了提到我也尝试过。然而,我只是将其视为无关,因为\u esModule
应该只支持ESM的模拟默认导出,正如您正确指出的,我在这里不使用它。在jest和babel配置中有什么特别的东西需要注意吗?\uu esModule
会影响命名导出的处理方式。忽略它可能会导致模块没有命名的导出。看见您需要babel jest以某种方式生效。我已再次尝试使用\u esModule
,并且可以确认指定的导出与以前相同。另外,我正在使用babeljest
,所以我刚刚发布了jest
和babeljest
的配置。我看不出有什么能引起那里的事。需要注意的一点是,我正在使用nx
来管理这个项目所属的monorepo,我认为这可能是个问题,但显式运行jest--config=jest.config.js
会产生同样的错误。我没有看到明显的问题。尝试以一种肯定会失败的方式模拟它,jest.mock('./module',()=>null)
。如果它没有尝试通过将import
更改为require
并将其放在jest.mock下面来避免起吊。