karma-jasmine - 如何测试返回对象

时间:2017-10-20 13:03:06

标签: jasmine karma-jasmine browserify commonjs istanbul

我尝试添加一个涵盖CommonJS文件module1.js中的return语句的测试,请参阅附图。

这是我目前正在尝试的内容:

describe("Module 1 ", () => {
    let mod, testMod = null;

    beforeEach(() => {
        mod = {
            module1: require('../src/app/js/module1/module1')
        };

        spyOn(mod, 'module1');
        testMod = mod.module1();
        console.log(testMod);
        console.log(mod.module1);
    });
    it('is executed', () => {
        expect(mod.module1).toHaveBeenCalled();
    });
});

Module1文件:

/**
 * Represents module1.
 * @module module1
 */

function module1() {
    let x = 13;

    return {
        getUserAgent: getUserAgent
    };

    /**
     * Return the userAgent of the browser.
     * @func getUserAgent
     */
    function getUserAgent() {
        return window.navigator.userAgent
    }
}

module.exports = module1;

日志输出:

LOG: undefined
LOG: function () { ... }

更新:当我记录mod.module.toString时,控制台会记录:

function () { return fn.apply(this, arguments); }

为什么我的模块不在那里?

我在这里尝试正确的方法吗?为什么mod.module1();无效?

Istanbul coverage Report

1 个答案:

答案 0 :(得分:0)

在Jasmine中设置spy on object方法时,不会调用原始函数。 所以在你的例子中mod.module1()不调用实际的模块函数而只调用间谍包装函数 - 根本不调用实际的函数。
如果您想要调用原始函数,则应使用and.callThrough

spyOn(mod, 'module1').and.callThrough();