我有一个简单的问题。如何对依赖于参数的函数进行单元测试?比如说:
代码:
function a(param) {
if(param > 0)
return param+value;
else
return param;
}
如何在没有参数的情况下对功能a进行单元测试?我听说我在茉莉花中使用嘲笑或间谍。有人能告诉我一个例子,我真的很困惑。谢谢大家。
修改
感谢大卫这样一个全面的回答。对此,我真的非常感激。以下是有关我的问题的更多信息。
这实际上是我的真实问题,我有一个文件
snap-fed.js :
//Code here...
当我向你展示时,我想全面地进行单元测试。但我不确定如何使用茉莉或摩卡这样做。
我怎么能测试snap对象的任何方法?我怎么能单元测试snap.eligibility或snap.isSnapResourceEligibile?我已经被困在这个问题上大约2天了,我真的不明白。
它们都接受参数信息,该参数信息提供有关方法正在处理的对象的信息。
这是我真正的问题,但我不知道怎么问。
编辑2:
基于David的模板,我做了这个,但它甚至没有运行......
snap-fed.spec.js :
describe("snap-fed", function() {
describe("Properties", function() {
it("should exist", function() {
expect(Allowance).not.toBeUndefined();
expect(AllowanceAdditional).not.toBeUndefined();
expect(MaxAllowanceHouseholdSize).not.toBeUndefined();
});
it("should contain correct values", function() {
expect(Allowance).toEqual([189, 347, 497, 632, 750, 900, 995, 1137]);
expect(AllowanceAdditional).toBe(142);
expect(MaxAllowanceHouseholdSize).toBe(Allowance.length);
});
});
describe("Functions", functions(){
it("should return the expected result", function() {
expect(snap.isSnapResourceEligible(info)).toBeTruthy();
});
//Put more test cases for the various methods of snap
});
});
答案 0 :(得分:4)
测试在Jasmine中看起来像这样:
describe("Function a", function() {
it("is defined", function() {
expect(a).not.toBeUndefined();
});
it("should return expected result for a positive parameter", function() {
var result = a(19);
expect(result).toEqual(24);
});
it("should return expected result for a negative parameter", function() {
var result = a(-1);
expect(result).toEqual(-1);
});
it("should return expected result for parameter zero", function() {
var result = a(0);
expect(result).toEqual(5);
});
});
这种情况期望函数value
内的变量a
是一个等于5的常量。场景可能更复杂,测试看起来会有所不同。如果有关于value
变量的任何逻辑,请在您的问题中显示,然后我会编辑我的答案。
编辑:问题的第二部分的测试样本
因此,在删除Q.fcall
后,如果资格函数看起来像这样:
eligibility: function (info) {
return {
eligible : snap.isSnapIncomeEligible(info) && snap.isSnapResourceEligible(info),
savings : snap.calcSavings(info)
};
}
然后你可以测试像这样的快照对象:
describe("Snap", function() {
var snap = ... //get the snap object here...
var disabledMemberInfo = {
disabledMember: true,
age: 50,
fpl: 1.2,
householdSize: 10,
moneyBalance: 4000
};
it("is defined", function() {
expect(snap).not.toBeUndefined();
});
it("has eligibility defined", function() {
expect(snap.eligibility).not.toBeUndefined();
});
it("return positive eligibility for disabled member with fpl < 1.2 and money balance 4000", function() {
var result = snap.eligibility(disabledMemberInfo);
expect(result).not.toBeUndefined();
expect(result.eligible).not.toBeUndefined();
expect(result.savings).not.toBeUndefined();
expect(result.eligible).toEqual(true);
});
});
我没有通过测试覆盖整个快照对象。但是更多的测试将是类似的,我的代码应该是一个例子,并以类似的方式构建更多的测试。