当前位置: 首页 > 面试题库 >

在每次测试中如何更改笑话模拟函数的返回值?

越麒
2023-03-14
问题内容

我的组件测试文件中有一个像这样的模拟模块

  jest.mock('../../../magic/index', () => ({
    navigationEnabled: () => true,
    guidanceEnabled: () => true
  }));

这些函数将在我的组件的渲染函数中调用以隐藏和显示某些特定功能。

我想对这些模拟函数的返回值的不同组合进行快照。

假设我有一个这样的测试用例

 it('RowListItem should not render navigation and guidance options', () => {
    const wrapper = shallow(
      <RowListItem type="regularList" {...props} />
    );
    expect(enzymeToJson(wrapper)).toMatchSnapshot();
  });

要运行此测试用例,我想更改模拟模块函数的返回值以使其false动态变化

jest.mock('../../../magic/index', () => ({
    navigationEnabled: () => false,
    guidanceEnabled: () => false
  }));

因为我RowListItem已经一次导入了组件,所以我的模拟模块不会再次重新导入。所以它不会改变。我该如何解决?


问题答案:

您可以模拟该模块,以便它返回间谍并将其导入您的测试中:

import {navigationEnabled, guidanceEnabled} from '../../../magic/index'

jest.mock('../../../magic/index', () => ({
    navigationEnabled: jest.fn(),
    guidanceEnabled: jest.fn()
}));

然后,您可以使用 mockImplementation

navigationEnabled.mockImplementation(()=> true)
//or
navigationEnabled.mockReturnValueOnce(true);

并在下一个测试中

navigationEnabled.mockImplementation(()=> false)
//or
navigationEnabled.mockReturnValueOnce(false);


 类似资料:
  • 如何在玩笑中清除模拟函数中的间谍?如果原始函数不是的话,工作得非常好。如何正确清除中的所有间谍?这个问题可能是如何在单个测试基础上更改模拟实现[Jestjs]的重复,尽管我的问题描述了一个不涉及多个模块的更简单的场景。

  • 我有以下组成部分: 现在我正在尝试编写一个单元测试来检查if条件(根据.to属性返回IndexLink或Link): 但我似乎无法测试函数的确切jsx返回,因为当我使用控制台时。记录我得到的其中一个返回: {$$typeof':Symbol(react.element),type:'div',key:'/',ref:null,props:{className:'navbar link contai

  • 我有一个自定义的选择组件,当你点击一个项目时,它会设置模型,但由于我手动调用每次我更改模型时,它都会非常混乱,而且是可重复的,这是我想要避免的。 所以我的问题是,是否有类似于,我可以观察值是否发生变化,然后在每次发生时调用。 我一直在阅读,但我不知道如何将其用于一个简单的值,因为我看到的所有示例都是针对外部api: s的异步请求。 肯定有更简单的方法来实现这一点吗? (并不是说我不能使用,因为我实

  • 我有下面的打字稿类,我想测试在笑话。 这是我的测试: 如何模拟MyClass中使用的foo函数,以使测试通过?

  • 我正在尝试测试一种使用hibernate、junit和mocking连接到db的方法 这是我的代码 UserDAO. java UserDAOImpl。Java语言 TestUserDAOImpl 测试用例向db添加了一组用户名和密码,但当我尝试使用返回结果时,它会返回一个空列表。 有人能帮我解决这个问题吗?

  • 我有一个jUnit测试,测试我的一个函数。在这个函数中,我调用了另一个类的方法,我想用mockito模拟这个方法。然而,我似乎不能实际嘲笑这一点。下面是我的jUnit测试的样子: 编辑:在我的MainClassImTesting()中。我正在调用的test()函数,它调用authenticateUser()并向它传递一个hashMap。