Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.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 Jest.mock外部变量引用_Javascript_Reactjs_Jestjs - Fatal编程技术网

Javascript Jest.mock外部变量引用

Javascript Jest.mock外部变量引用,javascript,reactjs,jestjs,Javascript,Reactjs,Jestjs,对于快照测试,需要模拟1个react组件,只是简单的虚拟模拟 当我试图在模拟函数中调用React.Component时,我得到一个错误: jest.mock()的第二个参数不允许引用任何 外部变量 但是如果我调用require('react')。组件,那就行了! 有没有人性化的方法来正确地做这件事 我的代码: //This one fails import React from ('react'); ... jest.mock('...', () => { return class

对于快照测试,需要模拟1个react组件,只是简单的虚拟模拟

当我试图在模拟函数中调用
React.Component
时,我得到一个错误:

jest.mock()
的第二个参数不允许引用任何 外部变量

但是如果我调用
require('react')。组件
,那就行了!
有没有人性化的方法来正确地做这件事

我的代码:

//This one fails
import React from ('react');
...
    jest.mock('...', () => { return class ... extends React.Component {
            render(){
                return <span/>
            }

    }});

//This one works
import React from ('react');
...
jest.mock('...', () => { return class ... extends require('react').Component {
            render(){
                return <span/>
            }

    }});
//这个失败了
从('React')导入React;
...
jest.mock(“…”,()=>{返回类…扩展React.Component{
render(){
返回
}
}});
//这个有效
从('React')导入React;
...
jest.mock(“…”,()=>{返回类…扩展require('react')。组件{
render(){
返回
}
}});

这曾经是我们修复的一个bug。在模拟中,您只能要求 您不允许访问外部变量

您可以通过这种方式更改代码以使其正常工作

jest.mock('...', () => {
  const React = require ('react')
  return class ... extends React.Component {
    render() {
      return <span />
    }    
  }
})
jest.mock(“…”,()=>{
const React=require('React')
返回类…扩展React.Component{
render(){
返回
}    
}
})

但如果要更改变量?假设您想要模拟一个具有一个对象的函数,并且为了在一个测试中进行测试,它必须为true,而其他必须为false。我现在怎么做呢?