unit-testing - 使用 Jest 手动模拟多个 CommonJS 模块

标签 unit-testing mocking jestjs

我使用 看到了 Jest 模拟的文档。模拟 文件夹,但我希望能够在一个测试中用一个模拟模拟一个模块,并在另一个测试中用另一个模拟模拟同一个模块。

例如,使用 rewire 和 jasmine,您可以执行以下操作:

//module2.js
module.exports = {
    callFoo: function () {
        require('moduleToMock').foo();
    }
};

//module2Test.js
describe("test1", function () {
    var mock;
    beforeEach(function () {
        var rewire = require('rewire');
        mock = jasmine.createSpyObj('mock', ['foo']);
    });
    it("should be mocked with type1", function () {
        mock.foo.and.returnValue("type1");
        rewire('moduleToMock', mock);
        var moduleUsingMockModule = require('module2');
        expect(moduleUsingMockModule.callFoo()).toEqual("type1");
    });
});
describe("test2", function () {
    it("should be mocked with type2", function () {
        mock.foo.and.returnValue("type2");
        rewire('moduleToMock', mock);
        var moduleUsingMockModule = require('module2');
        expect(moduleUsingMockModule.callFoo()).toEqual("type2");
    });
});

这可能与Jest有关吗?不同之处在于我在测试中定义了模拟,而不是在用于所有测试的某个外部文件夹中。

最佳答案

是的,您的模拟将如下所示:

module.exports = {
    foo: jest.genMockFunction();
}

然后,您将能够在测试用例中配置自定义行为:

var moduleToMock = require('moduleToMock');

describe('...', function() {
    it('... 1', function() {
        moduleToMock.foo.mockReturnValue('type1')

        expect(moduleToMock.foo).toBeCalled();
        expect(moduleUsingMockModule.callFoo()).toEqual("type1");
    });

    it('... 2', function() {
        moduleToMock.foo.mockReturnValue('type2')

        expect(moduleToMock.foo).toBeCalled();
        expect(moduleUsingMockModule.callFoo()).toEqual("type2");
    });
});

关于unit-testing - 使用 Jest 手动模拟多个 CommonJS 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28639662/

相关文章:

c# - 如何模拟Azure.Storage.Blobs的BlobContainerClient()?

testing - SAP Java Connector (JCo) 模拟服务器

java - 如何更改通过引用传递给 Mockito 中的模拟的对象

javascript - 如何用 Jest stub 类的所有方法?

unit-testing - 有些东西你就是不能测试?

unit-testing - 如何对重载函数进行单元测试?

javascript - TypeScript 装饰器中的异步调用

javascript - Intl.NumberFormat 空格字符不匹配

unit-testing - 如何检查函数是否已在 Rust 中调用?

c# - 在同一个模拟实例上断言对公共(public)方法的调用