I've created a complete simplified example that replicates the problem I'm getting.
function TestObj() {
var self = this;
self.getStuff = function(aString, callback) {
// TODO
}
}
describe(server communications, function() {
it(it calls the server, function() {
var obj = new TestObj();
obj.getStuff = jasmine.createSpy();
// swap the above line for this and it makes no difference
// spyOn(obj, getStuff);
var functionVar = function() {
};
obj.getStuff(hello, functionVar);
expect(obj.getStuff).toHaveBeenCalledWith(
[ hello, jasmine.any(Function) ]);
});
});
Instead of a passing unit test, I get the following output:
Expected spy to have been called with:
[ [ 'hello',<jasmine.any(function Function() { [native code] })> ] ]
but was called with:
[ [ 'hello', Function ] ]
Why is it not recognising that the functions I pass in (function (){}) are actually functions? Whats that native code stuff it is expecting? Anyone else had this issue with jasmine.any(Function)? Thankyou!
EDITED
I tried using spyOn instead of jasmine.createSpy() and it makes no difference. I tried just a single argument and it works. Introducing the first string argument breaks the jasmine.any(Function) - any ideas?