Monday, May 20, 2024
110
rated 0 times [  111] [ 1]  / answers: 1 / hits: 30331  / 10 Years ago, sun, january 18, 2015, 12:00:00

I've been reading through the Jasmine documentation and I've been struggling to understand what the Spies .and.stub method actually does. English is not my native language, so I don't even know what the word stub actually means, and there is no translation for it in my language.



In the documentation it says:




When a calling strategy is used for a spy, the original stubbing behavior can be returned at any time with and.stub.




describe(A spy, function() {  

var foo, bar = null;

beforeEach(function() {
foo = {
setBar: function(value) {
bar = value;
}
};

spyOn(foo, 'setBar').and.callThrough();
});

it(can call through and then stub in the same spec, function() {
foo.setBar(123);
expect(bar).toEqual(123);

foo.setBar.and.stub();
bar = null;

foo.setBar(123);
expect(bar).toBe(null);
});
});


What does and.stub actually do and how is it useful?


More From » unit-testing

 Answers
9

For the term, you can look at wikipedia : http://en.wikipedia.org/wiki/Test_stub



In a nutshell it's a fake object that you can control that replaces a real object in your code.



For the function, what I understand is that and.stub() removes the effect of and.callThrough() on a spy.



When you call and.callThrough, the spy acts as a proxy, calling the real function, but passing through a spy object allowing you to add tests like expectation.



When you call and.stub, or if you never call and.callThrough, the spy won't call the real function. It's really usefull when you don't want to test an object's behavior, but be sure that it was called. Helping you to keep your test truly unitary.


[#68173] Thursday, January 15, 2015, 10 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
lucianod

Total Points: 667
Total Questions: 106
Total Answers: 92

Location: Jordan
Member since Thu, Aug 5, 2021
3 Years ago
lucianod questions
;