我正在尝试使用jasmine为客户端javascript编写单元测试。
通常我将客户端javascript包装在像这样的匿名函数中
(function(){
// my code
})()
我遇到的问题是我无法找到让Jasmine可以访问的方法。有没有办法让我可以使用“我的代码”进行茉莉花测试,而不需要做这样的事情
var foo = function(){
//my code
}
foo()
答案 0 :(得分:2)
如果你想要任何外部代码(不仅仅是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
的方法。