javascript - 模块中的模拟导出函数

标签 javascript unit-testing jasmine ecmascript-6

我有两个包含导出函数的模块。 “ModuleB”使用“ModuleA”中的函数。现在我想测试“ModuleB”并模拟“ModuleA”中使用的函数。

我使用 ES6 和 babel。为了进行测试,我使用 karma 和 jasmine。

我尝试使用 babel-rewire 和ject-loader,但它不起作用。我对这一切都很陌生,我想我只是做错了什么。因此,我们非常感谢任何帮助!

moduleA.js

export function getResult() {
    return realResult;
}

moduleB.js

import * as ModuleA from './moduleA'

export function functionToTest() {
    let result = ModuleA.getResult();
    // do stuff with result which I want to test
}

我的测试

it("does the right thing", () => {
    // I tried using rewire, but this gives me an exception:
    ModuleB.__Rewire__('ModuleA', {

        getResult: () => {
            return fakeResult;
        }
    });

    let xyz = ModuleB.functionToTest(canvas, element);
});

最佳答案

看看这个库 https://www.npmjs.com/package/mockery我想这正是你想要的。希望对您有帮助!

编辑:

基本上,您必须在每个测试中使用模拟来模拟您的函数,唯一的问题是您必须使用 require 来反对导入您想要模拟的模块。看这个例子:

const moduleUnderTest = './moduleB.js';
const moduleA_fake = { getResult: () => { return "This is a fake result"; } } ;

describe("Mocking functions", () => {

    it('Should be Fake Result', (done) => {

        mock.registerAllowable(moduleUnderTest);
        mock.registerMock('./moduleA.js', moduleA_fake);

        mock.enable({ useCleanCache: true });

        let ModuleB = require(moduleUnderTest);
        let res = ModuleB.functionToTest();

        res.should.be.eql("This is a fake result");


        mock.disable();
        mock.deregisterAll();

        done();
    });

    it('Should be Real Result', (done) => {

        let ModuleB = require(moduleUnderTest);
        let res = ModuleB.functionToTest();

        res.should.be.eql("real foo");

        done();
    });

});

您可以看到完整的示例 Here

关于javascript - 模块中的模拟导出函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38764068/

相关文章:

angularjs - 如何使用 Karma/Jasmine 运行单个测试文件?

javascript - Protractor 和 Jasmine : How can I test redirects?

angular - JS,单元测试 : expect on a callback

javascript - 在 Javascript 中精确匹配 10 位数字

javascript - 为什么我的 Lambda 函数在一次调用中发送了两次 SQS 消息?

javascript - 在javascript中从本地驱动器读取文件/图像

java - 使用 PowerMockito 模拟内部类中的 final方法

javascript - 如何在 JavaScript 中构建 PDF 框架?

Java Parallel Streams 关闭线程

python - 你如何从pycharm运行nosetest?