繁体   English   中英

Mocking Jest 中的一个导入模块

Mocking an imported module in Jest

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我试图弄清楚如何在我的测试文件中用 Jest 模拟一个常量( DEFAuLT_OPTIONS

我有以下文件结构:

src/
  Builder/
    - Constants.js
    - Builder.js
    - Builder.test.js

文件

// Constants.js
// Define a set of defaults to be used in my production build

const DEFAULT_OPTIONS = {
  enableTransparency: true,
  threshold: 100
};

export {
  DEFAULT_OPTIONS
}

// Builder.js
// Exports a `buildTree` function, which uses the constants

import { DEFAULT_OPTIONS } from './Constants';

function buildTree(options) {
  return {
    root: '/',
    options: { ...options, ...DEFAULT_OPTIONS }
  };
}

export { buildTree };

// Builder.test.js

import { DEFAULT_OPTIONS } from './Constants';
import { buildTree } from './Builder';

describe('Builder', () => {
  it('some description', () => {

    // How to mock value of `DEFAULT_OPTIONS` here so that
    // the call to `buildGTree` uses my mocked version? 

    const options = { foo: 'bar' };
    const result = buildTree(options);

  });
});

我怎样才能 -

  • 模拟单个测试的DEFAULT_OPTIONS值?
  • 为一组测试模拟DEFAULT_OPTIONS的值? (如果不同)

谢谢!

编辑:我尝试了以下但模块似乎有一个undefined的值

const mockDefaultOptions = {
  optionA: 'a',
  optionB: 'b'
}

jest.mock('./Constants', () => ({
  DEFAULT_OPTIONS: mockDefaultOptions,
}));
1 个回复

你真的不需要jest.mock因为它只是一个常数。

你可以:

// import constants
import Constants from './Constants'
// modify DEFAULT_OPTIONS' value
Constants.DEFAULT_OPTIONS = {
  threshold: 444
}
// then invoke your function
const result = buildTree(options);

这就是您如何修改它以进行一系列测试

import { buildTree } from "./Builder";

describe("Builder", () => {
  describe.each([333, 444, 555])(
    "with DEFAULT_OPTIONS.threshhold = %d",
    (threshold) => {
      describe("buildTree", () => {
        const Constants = require("./Constants");
        const options = { foo: "bar" };
        let result;
        beforeAll(() => {
          Constants.DEFAULT_OPTIONS = {
            threshold,
          };
          result = buildTree(options);
        });

        it("some description", () => {
          expect(result).toHaveProperty("options", {
            ...options,
            threshold,
          });
        });
      });
    }
  );
});

1 使用 Jest 模拟在 vue 组件中导入的模块

我在处理Jest的文档时遇到了一些问题,因为我希望这段代码可以工作: 然而事实并非如此。 它失败了,就好像OrdersService从未被嘲笑过一样。 我也尝试过类似的东西: 第一个用模拟功能替换整个服务(我想实现文档中提到的自动模拟功能,其中所有原始方法都自动替换为模拟 fn)。 第二个失 ...

2 使用Jest +酶在React组件中导入的模拟节点模块

我正在尝试使用Jest和Enzyme测试React组件,但是我的测试无法运行,因为它似乎在使用特定的节点模块时遇到了麻烦。 实际上,破坏测试的模块是从我要测试的组件中导入的组件导入的。 这是层次结构: 见解 BuildOnScrollHelper( 这是导入节 ...

4 笑话模拟模块

我正在使用Jest为节点应用程序编写单元测试。 节点代码正在使用第三方库来记录信息。 该库具有getLogger函数,您应该调用该函数以返回记录器对象。 我试图模拟对该库的调用,并在我的单元测试中检测到它的调用。 节点代码如下: 在我的Jest单元测试中,我尝试以多种不同 ...

5 用Jest模拟节点模块

由于节点模块无法编译,我对我的本机应用程序的开玩笑的测试失败了(react-native-checkout)。 由于模块中的引用无效,因此无法编译。 我想嘲笑它,以便Jest测试通过。 我尝试使用jest.mock('react-native-checkout');进行简单的模拟 , ...

6 Mocking 一个带有 Jest 的配置模块

我正在尝试围绕使用简单的配置 object 添加测试。 假设我有: 配置文件 应用程序.ts 应用程序.test.ts 第二次测试失败,因为在第一次测试中修改了真实配置,但我希望它失败,因为 beforeEach 中的模拟已将值设置为“模拟 foo”。 我认为这与配置导出不是 function 有关 ...

7 Mocking 一个带有 Jest 的 NodeJS 模块

我花了一整天的时间寻找这个。 我有以下代码。 在我的测试中,我想模拟CarModel或CarService 。 要么对我有用。 我模拟这些的原因是用内存数据库替换真实数据库。 但我找不到任何可行的解决方案。 如果你们中的任何人有任何想法,那么我将不胜感激。 ###编辑### 汽车服务.js ...

8 Jest mocking 一个模块

我正在尝试使用 Jest 模拟模块导入,但由于某种原因我正在苦苦挣扎。 我有以下代码: src/elastic.js src/handlerFactory.js 我的测试文件目前看起来像: 测试/handlerFactory.unit.test.js 然而,目前我在测试中遇到错误: 类型错误:g ...

9 开玩笑 mocking 模块功能

我正在尝试对开玩笑的模拟函数做出断言,我的代码是这样的const saveProductMock = jest.fn((product) => { //someLogic return }); jest.mock('./db', () => { return { s ...

10 React中的Jest模块模拟

进入功能组件+挂钩和React Unit测试,我正在尝试执行以下操作: 在一个组件中,我使用了实用程序API文件中的函数。 在挂载时,我对我的api进行了异步函数调用。 在该实用程序API文件中,我想以各种方式模拟该函数,因此当我在测试中渲染组件时,它将在挂钩中看到不同的响应。 它将 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM