Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
57
rated 0 times [  63] [ 6]  / answers: 1 / hits: 79864  / 13 Years ago, sun, february 19, 2012, 12:00:00

I am using Jasmine to test if certain objects are created and methods are called on them.



I have a jQuery widget that creates flipcounter objects and calls the setValue method on them. The code for flipcounter is here: https://bitbucket.org/cnanney/apple-style-flip-counter/src/13fd00129a41/js/flipcounter.js



The flipcounters are created using:



var myFlipCounter = new flipCounter(counter, {inc: 23, pace: 500});


I want to test that the flipcounters are created and the setValue method is called on them. My problem is that how do I spy on these objects even before they are created? Do I spy on the constructor and return fake objects? Sample code would really help. Thanks for your help! :)



Update:



I've tried spying on the flipCounter like this:



myStub = jasmine.createSpy('myStub');
spyOn(window, 'flipCounter').andReturn(myStub);

//expectation
expect(window.flipCounter).toHaveBeenCalled();


Then testing for the setValue call by flipCounter:



spyOn(myStub, 'setValue');

//expectation
expect(myStub.setValue).toHaveBeenCalled();


the first test for initializing flipCounter is fine, but for testing the setValue call, all I'm getting is a 'setValue() method does not exist' error. Am I doing this the right way? Thanks!


More From » jasmine

 Answers
99

flipCounter is just another function, even if it also happens to construct an object. Hence you can do:



var cSpy = spyOn(window, 'flipCounter');


to obtain a spy on it, and do all sorts of inspections on it or say:



var cSpy = spyOn(window, 'flipCounter').andCallThrough();
var counter = flipCounter('foo', options);
expect(cSpy).wasCalled();


However, this seems overkill. It would be enough to do:



var myFlipCounter = new flipCounter(counter, options);
expect(myFlipCounter).toBeDefined();
expect(myFlipCounter.getValue(foo)).toEqual(bar);

[#87365] Friday, February 17, 2012, 13 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
maxh

Total Points: 137
Total Questions: 100
Total Answers: 103

Location: Kazakhstan
Member since Mon, Sep 26, 2022
2 Years ago
;