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
});
});
Best Solution
The test could look like this in Jasmine:
This scenario is expecting the variable
value
inside functiona
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 thevalue
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
:Then you could test the snap object like this for example:
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.