【问题标题】:How to handle global objects / tests influencing other tests in Jest如何处理影响 Jest 中其他测试的全局对象/测试
【发布时间】:2017-04-18 14:41:59
【问题描述】:

我在 React Native 项目中的一些测试会影响全局对象。这些更改通常会影响依赖相同对象的其他测试。

例如:一个测试检查是否正确添加了侦听器,第二个测试检查是否正确删除了侦听器:

// __tests__/ExampleClass.js
describe("ExampleClass", () => {
    it("should add listeners", () => {
        ExampleClass.addListener(jest.fn());
        ExampleClass.addListener(jest.fn());

        expect(ExampleClass.listeners.length).toBe(2);
    });
    it("should remove listeners", () => {
        const fn1 = jest.fn();
        const fn2 = jest.fn();
        ExampleClass.addListener(fn1);
        ExampleClass.addListener(fn2);

        expect(ExampleClass.listeners.length).toBe(2);

        ExampleClass.removeListener(fn1);

        expect(ExampleClass.listeners.length).toBe(1);

        ExampleClass.removeListener(fn2);

        expect(ExampleClass.listeners.length).toBe(0);
    });
});

第二个测试会自行运行良好,但在所有测试都运行时失败,因为第一个测试没有清理 ExampleClass。我是否总是必须在每次测试中手动清理此类内容?

似乎我不明白 Jest 中的作用域是如何工作的……我假设每个测试都将在新环境中运行。有这方面的文档吗?

其他示例包括模拟外部库并检查其中的模拟函数是否被正确调用或将 Platform.OS 覆盖到 ios 或 android 以测试特定于平台的实现。

【问题讨论】:

    标签: javascript unit-testing jestjs


    【解决方案1】:

    据我所知,测试的范围始终是测试文件。现在我将代码更改为有一个beforeEach 回调,主要调用jest.resetAllMocks() 并将Platform.OS 重置为其默认值。

    快速和沙盒

    Jest 将跨工作人员的测试运行并行化,以最大限度地提高性能。控制台消息与测试结果一起缓冲和打印。沙盒测试文件和每个测试的自动全局状态重置,因此两个测试不会相互冲突。

    https://facebook.github.io/jest/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 2015-07-25
      • 2018-12-02
      • 2016-05-28
      • 2022-08-24
      • 1970-01-01
      相关资源
      最近更新 更多