繁体   English   中英

Mocking 一个带有 Jest 的配置模块

[英]Mocking a config module with Jest

提示:本站为国内最大中英文翻译问答网站,提供中英文对照查看,鼠标放在中文字句上可显示英文原文

我正在尝试围绕使用简单的配置 object 添加测试。 假设我有:

配置文件

export default {
  foo: "bar",
};

应用程序.ts

import config from "./config";

export default () => {
  return config.foo;
};

应用程序.test.ts

import App from "./app";
import config from "./config";

describe("App", () => {
  beforeEach(() => {
    jest.mock("./config", () => ({ default: { foo: "mock foo" } }));
  });

  it("returns a mocked value of config.foo", () => {
    config.foo = "baz";
    expect(App()).toBe("baz");
  });

  it("returns the default value of config.foo", () => {
    expect(App()).toBe("bar");
  });
});

第二次测试失败,因为在第一次测试中修改了真实配置,但我希望它失败,因为 beforeEach 中的模拟已将值设置为“模拟 foo”。 我认为这与配置导出不是 function 有关,所以我不能做类似jest.spyOn...的事情。 但是,如果有一种方法可以模拟 object,它将为我正在处理的项目中节省大量重构!

您可以使用jest.doMock(moduleName, factory, options)模拟每个测试用例的./config模块。

例如

config.ts

export default {
  foo: 'bar',
};

app.ts

import config from './config';

export default () => {
  return config.foo;
};

app.test.ts

describe('App', () => {
  beforeEach(() => {
    jest.resetModules();
  });
  it('returns a mocked value of config.foo', () => {
    jest.doMock('./config', () => ({ foo: 'baz' }));
    const App = require('./app').default;
    expect(App()).toBe('baz');
  });

  it('returns the default value of config.foo', () => {
    jest.doMock('./config', () => ({ foo: 'bar' }));
    const App = require('./app').default;
    expect(App()).toBe('bar');
  });
});

单元测试结果:

 PASS  src/stackoverflow/65049305/app.test.ts (12s)
  App
    ✓ returns a mocked value of config.foo (8ms)
    ✓ returns the default value of config.foo (1ms)

Test Suites: 1 passed, 1 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        13.288s
问题未解决?试试本站强大的搜索功能,搜索: Mocking 一个带有 Jest 的配置模块
用开玩笑的方式嘲笑 fs 与配置模块发生冲突

[英]Mocking fs with jest clashes with config module

我正在尝试对以下文件进行单元测试: 开玩笑的测试文件 当我运行测试时,我收到以下错误: 错误来自上述 fs 模块文件导入的记录器文件。 logger.utils文件 我相信错误的原因是我没有正确模拟fs模块,但我尝试了各种方法并不断收到此错误。 请指教。 ...

开玩笑 mocking 模块功能

[英]jest mocking module functions

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

开玩笑嘲笑在模块导出之前实例化的依赖项

[英]Jest mocking a dependency that's instantiated before the module export

我正在尝试测试一个导出默认功能的文件,并在导出函数之前实例化一个对象,该对象每次调用导出函数时都需要保持相同的实例。 这是该模块的简化版本: 我想测试发送到client.get()函数的url是否正确,所以这里是测试: 测试运行时,来自myModule({})的响应始终是不 ...

在JEST中模拟模块时如何解决模块依赖性

[英]How to resolve module dependancies when mocking modules in JEST

我有一个node模块分辨率。 并具有下一个模块: 因此, B.tsx包括A.tsx : 现在,我想用UT覆盖B 我为此开玩笑。 因此,在整个测试过程中,我想模拟A模块。 我可以使用几种方法来做到这一点: 直接在测试文件中重新定义: 可以了! ...

使用 Jest、AudioContext 进行测试和模拟

[英]Testing and Mocking with Jest, AudioContext

我在尝试对使用 AudioContext 的类进行一些测试时遇到了很多麻烦。 我相信我的很多挫败感源于对模拟函数以及可能的测试执行方式没有很好的理解。 我正在尝试测试一个采用 AudioContext 的类,但是在运行测试时我不断收到此错误: 使用 TypeScript 文件时: TypeErr ...

在打字稿中用 Jest + Supertest 模拟

[英]Mocking with Jest + Supertest in Typescript

我正在用打字稿中的 jest 编写模拟测试用例并尝试使用 supertest 模拟 API 调用,但无法获得模拟响应作为回报,因为我在登录功能上使用 Axios 甚至尝试模拟 Axios 调用但得到了没运气。 这是我的代码: auth.controller.ts auth.test.ts ...

开玩笑地嘲笑温斯顿记录器

[英]Mocking winston logger in jest

我正在考虑如何模拟运输。 文件(来自 winston 节点模块)。 我正在使用 jest,所以__mocks__/winston.ts是自动加载的。 我认为我不能嘲笑它,因为有new 错误:TypeError:无法读取未定义的属性“文件” ...

Mocking 库挂钩与 Jest

[英]Mocking library hook with Jest

设置我在我的一个组件中使用了一个名为react-firebase-hooks的库。// Component.tsx import React, {useEffect} from 'react'; import { Firebase } from '../firebase/firebase'; im ...

Mocking 开玩笑的日期

[英]Mocking date in jest

我有名为setMockDate的 function 看起来像:/** * @param {Date} expected * @returns {Function} Call to remove Date mocking */ const setMockDate = (expected: Dat ...

暂无
暂无

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

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