Monday, May 20, 2024
25
rated 0 times [  26] [ 1]  / answers: 1 / hits: 17577  / 10 Years ago, tue, september 2, 2014, 12:00:00

I have a simple question. How do I unit test a function which is dependent on a parameter? Like say for example:



Code:



function a(param) {
if(param > 0)
return param+value;
else
return param;
}


How do I unit test function a without having param? I hear this I use mocks or spies in jasmine. Can someone show me an example, I am really confused. Thank you all in advance.



Edit:



Thank you for such a conprehensive answer David. I really appreciate it. Here is more information about my question.



This is in fact my true question, I have a file



snap-fed.js :



//Code here...


Which I would like to unit test comprehensively as you showed me. But I am unsure as to how to do this using jasmine or mocha.



Like how could I test any of the methods of the snap object? How could I unit test snap.eligibility or snap.isSnapResourceEligibile? I have been stuck on this issue for about 2 days, I really don't understand.



They all take in a parameter info which provides info about the object being worked on by the methods.



This was my true question but I did not know how to ask it.



Edit 2:



Based on David's template I made this, but it doesn't even run...



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

});

});

More From » unit-testing

 Answers
28

The test could look like this in 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);
});

});


This scenario is expecting the variable value inside function a to be a constant equal to 5. The scenario can be more complex and the tests would look differently. If there is any logic about the value variable, please show it in your question, I will then edit my answer.



EDIT: test sample for the second part of your question



So if the eligibility function looked like this after removing the Q.fcall:



eligibility: function (info) {
return {
eligible : snap.isSnapIncomeEligible(info) && snap.isSnapResourceEligible(info),
savings : snap.calcSavings(info)
};
}


Then you could test the snap object like this for example:



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);
});

});


I didn't cover the whole snap object with tests. But more test will be similar, my code should be an example and more tests built in a similar way.


[#69589] Friday, August 29, 2014, 10 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
micayla

Total Points: 148
Total Questions: 92
Total Answers: 109

Location: Aruba
Member since Sat, Oct 2, 2021
3 Years ago
micayla questions
Fri, Dec 24, 21, 00:00, 2 Years ago
Thu, Apr 16, 20, 00:00, 4 Years ago
Thu, Nov 14, 19, 00:00, 5 Years ago
;