karma-jasmine - 如何测试 return 对象

karma-jasmine - how to test return object

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

这是我目前正在尝试的:

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();
    });
});

模块 1 文件:

/**
 * 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(); 不起作用?

当您在 Jasmine 中设置 spy on object 方法时,不会调用原始函数。 因此,在您的示例中,mod.module1() 不调用实际模块函数,而仅调用间谍包装函数 - 根本不调用实际函数。
如果你想调用原始函数,你应该使用 and.callThrough:

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