首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用jestjs进行单元测试隔离

用jestjs进行单元测试隔离
EN

Stack Overflow用户
提问于 2017-04-07 09:57:02
回答 1查看 2.2K关注 0票数 4

用jest处理测试隔离的最佳方法是什么?我希望用静态方法测试ES6类,并模拟单元测试中不直接涉及的方法。

我的班级档案:

代码语言:javascript
复制
class Util {

    static getFirstName() {
        return "John";
    }

    static getLastName() {
        return "Doe";
    }

    static getFullName(){
        return `${Util.getFirstName()} ${Util.getLastName()}`;
    }
}

我的测试文件:

代码语言:javascript
复制
import Util from '../src/util';

test("Test getFullName", () => {
    Util.getFirstName = jest.fn().mockReturnValue("MockFirstName");
    Util.getLastName = jest.fn().mockReturnValue("MockLastName");

    expect(Util.getFullName()).toBe("MockFirstName MockLastName")
});

test("Test getFirstName", () => {
    expect(Util.getFirstName()).toBe("John")
});

test("Test getLastName", () => {
    expect(Util.getLastName()).toBe("Doe")
});

这样,我的最后两个测试就会失败,因为在第一个测试上设置的模拟仍然是活动的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-07 10:02:18

假设这些import语句被转换为require,您应该能够使用resetModules

代码语言:javascript
复制
beforeEach(() => {
    // Clears the require cache so that a new module is require'd
    // before each test.
    jest.resetModules();
});

然后,在每个测试中,您需要要求模块:

代码语言:javascript
复制
test("name", () => {
    const { default: Util } = require("../src/util");
});

或者如果您可以使用动态导入语法:

代码语言:javascript
复制
test("name", () => import("../src/util")
    .then(({ default: Util }) => {
        expect(Util.getFirstName()).toBe("John");
    })
);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43275143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档