gpt4 book ai didi

javascript - 测试使用闭包变量的 Javascript 函数的最佳方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:46:46 25 4
gpt4 key购买 nike

所以我遇到的问题是我有一个在闭包中使用变量的函数,当测试它时,它返回对它范围内变量的引用。我的代码类似于以下内容:

var app = function() {
var theString = "";

//Appends ztvars onto the url passed into the function
var appendString = function(url) {
if (theString.length === 0) {
return url;
}

return url+theString;
};

//Used for testing, returns the function appendPageVars
this.returnFunctions = function() {
return { appendString: appendString };
}
}

使用 QUnit 的测试代码如下所示:

var theApp = new app();
appFunctions = theApp.returnFunctions();
test('appendString()', function() {
var theString = "TestString";
var theUrl = "http://www.test.com";
equals(appFunctions.appendString(testUrl), theUrl+theString, "Checking the string appended to the url"); //Fails
});

问题是,即使将函数传回测试,appendString 函数仍然持有对应用范围内定义的 theString 的引用。

我已经设法通过使用 eval 创建函数的克隆而不是像这样直接使用它来解决这个问题:

var theApp = new app();
appFunctions = theApp.returnFunctions();
test('appendString()', function() {
var theString = "TestString";
var theUrl = "http://www.test.com";
eval("var appendString = "+appFunctions.appendString.toString());
equals(appendString(testUrl), theUrl+theString, "Checking the string appended to the url"); //Passes
});

然而,我一直被教导要避免 eval,所以我想知道是否有更好的方法来做到这一点?我是不是遗漏了什么,或者这是应该如何完成的?

最佳答案

当您为对象提供模拟对象时,您需要的是依赖注入(inject)。

var App = function (theString) {
theString = theString || ''; // optional argument

var appendString = function (str) {
return theString + str;
};
this.returnFunctions = function () {
return { appendString: appendString };
};
};

test('appendString()', function () {
var app = new App('TestString');
var fns = app.returnFunctions();
equals(fns.appendString('test'), 'TestStringtest', ...);
});

关于javascript - 测试使用闭包变量的 Javascript 函数的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9255088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com