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();
我正在尝试添加一个测试,该测试将涵盖 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();