gpt4 book ai didi

javascript - 是否可以在不创建全局变量的情况下对客户端 javascript 进行单元测试?

转载 作者:行者123 更新时间:2023-11-29 21:51:43 25 4
gpt4 key购买 nike

我正在尝试使用 jasmine 为客户端 javascript 编写单元测试。

通常我将客户端 javascript 包装在这样的匿名函数中

(function(){ 
// my code
})()

我遇到的问题是我找不到让 Jasmine 可以访问它的方法。有没有办法让 jasmine 可以使用“我的代码”进行测试,而无需做这样的事情

var foo = function(){
//my code
}
foo()

最佳答案

如果您希望任何外部代码(不仅仅是 Jasmine)能够使用您编写的任何部分,它必须在某种程度上是全局的。这并不意味着您必须公开每个变量和函数,但与任何软件模块一样,任何旨在公开可用的内容都必须公开。

例如,如果您有以下代码:

var purchaseAmount = 50;
var taxRate = 0.08;

function CalculateBill() {
return purchaseAmount + ComputeTax();
}

function ComputeTax() {
return purchaseAmount * taxRate;
}

您的第一种方法会隐藏所有这些,以免在其他任何地方使用:

(function () {
//Everything from the previous code sample

alert(CalculateBill());
})();

//Jasmine has no access to CalculateBill()

您可以做的是创建一个类,仅公开应该公开的内容:

function FinancialCalculator(taxRate) {
function ComputeTax(purchaseAmount) {
return purchaseAmount * taxRate;
}

this.CalculateBill = function(purchaseAmount) {
return purchaseAmount + ComputeTax(purchaseAmount);
}
}

Jasmine 可以做这样的事情:

describe("Financial Calculator", function() {
it("Calculates the bill correctly", function() {
expect(new FinancialCalculator(0.08).CalculateBill(50)).toEqual(54);
});
});

虽然 ComputeTax() 和其他底层实现细节仍然隐藏。

如果某个类不适合您的情况,您可以改用一个全局对象,该对象同样准确地公开了公开需要的内容。这是 jQuery 和 Knockout.js 分别采用 $ko 的方法。

关于javascript - 是否可以在不创建全局变量的情况下对客户端 javascript 进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28763547/

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