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

React应用程序中带有Jest的模拟导入/模块

祁嘉木
2023-03-14

我正在开发一个React应用程序,我想测试一个模块,我们称之为B,这取决于另一个模块,我们称之为a。

场景可能是这样的:

export function helperFn() {
  return { prop1: 10, prop2: 20 };
}
import React from 'react';
import { helperFn } from '../moduleA';

export class CustomComp extends React.Component {
  render() {
    const helperObj = helperFn();
    return (
      <div>{helperObj.prop1}</div>
    );
  }
}

测试我的组件的核心库是Jest和Ezyme。我的目标是测试模块B,但我想单独测试它,所以我想模拟对模块A的依赖。js。

我知道一种方法是注入helperFn作为道具,而不是导入它,这样在测试期间我就可以注入一个模拟函数,但是这个应用程序上有很大的模块,每个模块都有一些依赖关系。

研究了一下,我发现用笑话嘲笑一个依赖是可行的,但是我尝试了很多事情都没有成功。我试图从这个问题,也从这篇文章的方法,我没有运气。我还阅读了Jest文档中的手动模拟和模拟函数指南,但我认为它们非常令人困惑。

我可以使用这篇文章中的方法使它工作(即,我可以模拟moduleA.js依赖关系),但当时我遇到了另一个问题。测试moduleB效果很好。js,但当我继续测试moduleA时。js,我必须导入moduleA。模块a中的js。测验js和我得到了模拟,而我想要的是真正的模块。

所以,我需要帮助理解如何在moduleB测试文件中模拟依赖项。

我希望我是清楚的,如果不让我知道,我会补充你可能需要的澄清。

提前感谢!

共有1个答案

伍溪叠
2023-03-14

事实上,您可以使用jest来模拟您的依赖关系。您需要设置一些配置,以使其与导入一起工作。例如配置Babel-jest

如果您已经有了这个配置,那么您可以像这样嘲笑它。

import React from 'react';
import { shallow } from 'enzyme';
import { helperFn } from '../moduleA';
jest.mock('../moduleA');

describe("CustomComp", () => {
  it("should render component", () => {
    helperFn.mockReturnValueOnce({
      prop1: "dummy"
    });
    const component = shallow(<CustomComp />);
  });

您可以在这里看到一个工作示例。

 类似资料:
  • 问题内容: 我有一个React组件,其中包含一些其他组件,这些组件依赖于对Redux存储等的访问,这会在执行完整的酶安装时引起问题。假设这样的结构: 我想使用Jest的方法来模拟子组件,因此测试无需担心。 我知道我可以通过以下方式模拟出一个简单的组件: 但是,由于该组件通常会接收道具,因此React会感到不安,并发出有关将未知道具(在本例中为)传递给的警告。 我试图返回一个函数,但是由于悬挂了,所

  • 问题内容: 我开始认为这是不可能的,但是无论如何我都想问。 我想测试我的一个ES6模块以特定方式调用另一个ES6模块。有了茉莉花,这非常容易- 应用程式码: 和测试代码: 笑话相当于什么?我觉得这是一件很想做的简单的事,但是我一直在努力尝试弄清头发。 我最接近的是将s 替换为s,并将其移入测试/函数中。都不是我想做的事情。 为了获得加分,我希望在其中的功能为默认导出时使整个工作正常进行。但是,我知

  • null 如上所示,它导出了一些命名函数,而且重要的是 使用了 。 开玩笑地说,当我为 编写单元测试时,我希望模拟 函数,因为我不希望 中的错误影响我为 编写的单元测试。我的问题是我不确定最好的方法是: 如有任何帮助/洞察力,我们将不胜感激。

  • 我想对我的服务进行单元测试。在我的服务中,我有一个构造函数,它是: ContractService.ts 我的模型看起来是这样的:(模型是来自sequelize-typescript的类) 所以我想用JEST创建我的单元测试。当我试图模仿contractModel时,它找不到方法,即使我试图模仿它。 我在想,怎样才是嘲弄这个合同模型的正确方法。

  • 问题内容: 我正在编写pytest插件,该插件应测试旨在在一组特定环境中运行的软件。 我正在编写的软件在一个更大的框架内运行,这使某些Python模块仅在框架内运行我的Python软件时可用。 为了测试我的软件,我需要“模拟”或伪造整个模块(实际上是很多模块)。我需要以某种类似的方式实现其功能,但是我的问题是,如何使用py.test插件将该虚假的Python模块提供给我的软件代码? 例如,假设我的

  • 我有两个应用程序:同事和服务,每个都有自己的模型 在coworkers models.py中,我可以“从services.models导入服务”。 当我尝试在services models.py中“from coworkers.models import Status”时,会收到以下错误消息: 回溯(最近一次调用):文件“/Users/lucas/Documents/projetos/cwk-ma