如何在将变量传递给 javascript iffe 时进行测试
How to test when passing a variable into a javascript iffe
如果我想模拟传入的参数 y,如何在 Jasmine 中测试以下 iife javascript?
由于脚本文件在 specs 脚本之前被引用,所以在我可以 mock/spy 对象上的 y 之前立即调用 y 。
我可以在 spec runner html(或什至另一个 js 文件)上创建一个虚拟模拟对象,但这不允许我在每次测试中更改模拟值,因为我无法引用变量 checkObject,因此我无法测试 pass/fail 场景。
我错过了什么吗?
谢谢
文件1.js
var y = {
age:25
}
文件2.js
var helper = (function(checkObject){
function isValid(itemToCheck){
return itemToCheck > checkObject.age ;
}
return {isValid:isValid}
})(y);
我明白你想做什么了。我认为你应该重新设计你的代码。当代码的和平不可测试时,这表明设计不佳。
iife 基本上用于创建新的词法范围以防止污染全局范围。在您的情况下,您将 iife 用作对象工厂。一种解决方案是创建一个带有 checkObject 和 return 辅助对象的辅助工厂。
var helperFactory = {};
helperFactory.createHelper = function (checkObject){
function isValid(itemToCheck){
return itemToCheck > checkObject.age ;
}
return {isValid:isValid}; // this is the helper object returned by the factory
}
现在您可以测试 helperFactory 和 helper 对象是否可测试。要使用 y 变量,您可以这样做:
var helper = helperFactory.createHelper(y);
记住,iife主要是用来隐藏变量(创建新作用域)的。如果你想隐藏 helperFactory,你必须使用某种机制使这个对象在全局范围内可见。例如,您可以像这样将 helperFactory 附加到 window 全局对象:
(function(){
window.helperFactory = {};
window.helperFactory.createHelper = function (checkObject){
function isValid(itemToCheck){
return itemToCheck > checkObject.age ;
}
return {isValid:isValid}; // this is the helper object returned by the factory
}
})();
var helper = window.helperFactory.createHelper(y);
如果我想模拟传入的参数 y,如何在 Jasmine 中测试以下 iife javascript? 由于脚本文件在 specs 脚本之前被引用,所以在我可以 mock/spy 对象上的 y 之前立即调用 y 。
我可以在 spec runner html(或什至另一个 js 文件)上创建一个虚拟模拟对象,但这不允许我在每次测试中更改模拟值,因为我无法引用变量 checkObject,因此我无法测试 pass/fail 场景。 我错过了什么吗?
谢谢
文件1.js
var y = {
age:25
}
文件2.js
var helper = (function(checkObject){
function isValid(itemToCheck){
return itemToCheck > checkObject.age ;
}
return {isValid:isValid}
})(y);
我明白你想做什么了。我认为你应该重新设计你的代码。当代码的和平不可测试时,这表明设计不佳。 iife 基本上用于创建新的词法范围以防止污染全局范围。在您的情况下,您将 iife 用作对象工厂。一种解决方案是创建一个带有 checkObject 和 return 辅助对象的辅助工厂。
var helperFactory = {};
helperFactory.createHelper = function (checkObject){
function isValid(itemToCheck){
return itemToCheck > checkObject.age ;
}
return {isValid:isValid}; // this is the helper object returned by the factory
}
现在您可以测试 helperFactory 和 helper 对象是否可测试。要使用 y 变量,您可以这样做:
var helper = helperFactory.createHelper(y);
记住,iife主要是用来隐藏变量(创建新作用域)的。如果你想隐藏 helperFactory,你必须使用某种机制使这个对象在全局范围内可见。例如,您可以像这样将 helperFactory 附加到 window 全局对象:
(function(){
window.helperFactory = {};
window.helperFactory.createHelper = function (checkObject){
function isValid(itemToCheck){
return itemToCheck > checkObject.age ;
}
return {isValid:isValid}; // this is the helper object returned by the factory
}
})();
var helper = window.helperFactory.createHelper(y);