当前位置: 首页 > 知识库问答 >
问题:

使用Jest和Ezyme,如何测试通过道具传入的函数?

江瀚昂
2023-03-14

使用玩笑和酶,我如何测试这一点。道具。功能测试运行了吗?

class TestComponent extends Component {
   static propTypes = {
     functionToTest: PropTypes.func
   }
   componentDidMount() {
     this.props.functionToTest()
   }
}

开玩笑的是,我试着创建mockProps,并在安装组件时传递它们。

let props = {
  functionToTest = jest.fn(() => {});
}
beforeEach(() => {
  const wrapper = mount(<TestComponent {...props} />
}

控制台。登录componentDidMount函数会将functionToTest显示为未定义。显然,在坐骑过程中通过道具是不起作用的。

问题1:如何传入将在componentDidMount函数中显示的模拟道具?

问题2:一旦该函数可用,我如何获得该函数的访问权限,以便在函数运行时使用spyOn或类似的测试工具?

共有2个答案

纪实
2023-03-14

问题是TestComponent只在Redux包装器中导出。在类级别添加导出并在Jest测试导入中对其进行分解,以及Henrick在上面发布的解决方案修复了它。

马博学
2023-03-14

我不知道你的确切设置,但我会这样做:

  • jest模拟函数。fn()就像你做的那样
  • 将mock传递给正在安装的组件(就像您所做的那样)
  • 检查它是否使用expect(…)运行。toBeCalled()。TohaveBeenCall()(在不同的Jest版本中有所不同)

.

let props = {
  functionToTest: jest.fn() // You don't need to define the implementation if it's empty
};

beforeEach(() => {
  const wrapper = mount(<TestComponent {...props} />
}

// In the test code:
it('does something', () => {
    expect(props.functionToTest).toBeCalled();
    // OR... depending on your version of Jest
    expect(props.functionToTest).toHaveBeenCalled();
});
 类似资料:
  • 问题内容: 我正在为我的React代码编写Jest测试,并希望使用/测试PropType检查。我对Javascript领域很陌生。我正在使用npm进行安装并有一个简单的方法: 在我的测试中。我的测试看起来很像玩笑/反应教程示例,其代码如下: 但是,似乎并未触发组件中的PropType检查。我知道检查仅在开发模式下运行,但是我还认为通过npm获得了开发版本。当我使用watchify构建组件时,检查会

  • 如何使用jest框架测试void javascript函数(一个不返回任何东西的函数)?你能提供一个同样的例子吗? 我们如何测试这种类型的函数?

  • 我试图理解Jests的异步测试。 我的模块有一个函数,它接受一个布尔值并返回一个值的承诺。executer函数调用 ,在超时回调中,promise根据最初提供的布尔值进行解析或拒绝。代码如下所示: 我想用Jest来测试一下。我想我需要使用Jest提供的模拟计时器,所以我的测试脚本看起来有点像这样: 无论是否调用 ,我都会得到以下错误/失败测试 你能解释一下我哪里出错了吗?我该怎么做才能通过考试,保

  • 问题内容: 首先,我遵循Flux架构。 我有一个显示秒数的指示器,例如:30秒。每显示一秒,它就会少显示一秒钟,因此29、28、27直到0。当到达0时,我清除间隔,使其不再重复。而且,我触发一个动作。派遣此操作后,我的商店会通知我。因此,发生这种情况时,我将间隔重置为30秒,依此类推。组件看起来像: 组件工作正常。现在,我想用Jest测试它。我知道我可以使用renderIntoDocument,然

  • 问题内容: 我有一个带有构造函数注入的控制器 这是一个简单的类,可以正常工作。但是,当我尝试使用下面的类运行JUnit测试时,出现错误。 错误是: 上面的错误消息使我感到困惑,我该如何使用零参数构造函数注入userMapper?我知道可以在MainController中为userMapper添加@Autowired,但是不建议使用字段注入。请有人指导我一种用于构造函数注入和MockMvc测试的合适

  • 请考虑以下示例: 我希望将值传递到中,作为哑输入组件的道具。然而,它从不重新呈现它。