Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mock.mockImplementation不是一个函数_Javascript_Reactjs_Typescript_Unit Testing_Jestjs - Fatal编程技术网

Javascript Mock.mockImplementation不是一个函数

Javascript Mock.mockImplementation不是一个函数,javascript,reactjs,typescript,unit-testing,jestjs,Javascript,Reactjs,Typescript,Unit Testing,Jestjs,我在这里尝试搜索每一个类似的问题,不幸的是没有一个解决方案对我有效 我目前正在尝试模拟模块中的命名导出,如下所示: 模块.ts 导出函数someFunctionOne(){ //实施 } export const someFunctionTwo=函数( ) { //实施 } 导出常量someFunctionThree=()=>{ //实施 } 导出常量someFunctionFour=()=>{ //实施 } 这里有四个导出,在我的测试中,我需要模拟整个模块: 两个出口应首先模拟到某个值,然

我在这里尝试搜索每一个类似的问题,不幸的是没有一个解决方案对我有效

我目前正在尝试模拟模块中的命名导出,如下所示:

模块.ts

导出函数someFunctionOne(){
//实施
}
export const someFunctionTwo=函数(
) {
//实施
}
导出常量someFunctionThree=()=>{
//实施
}
导出常量someFunctionFour=()=>{
//实施
}
这里有四个导出,在我的测试中,我需要模拟整个模块:

  • 两个出口应首先模拟到某个值,然后通过一些测试(但不是全部)重新模拟
  • 两个输出只应在最初模拟,不需要重新模拟,因为我在每次测试中都使用相同的模拟
测试如下所示:

模块测试.ts

从“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下面来避免起吊。