Using object types with Jasmine's toHaveBeenCalledWith method
I've discovered an even cooler mechanism, using jasmine.any()
, as I find taking the arguments apart by hand to be sub-optimal for legibility.
In CoffeeScript:
obj = {}obj.method = (arg1, arg2) ->describe "callback", -> it "should be called with 'world' as second argument", -> spyOn(obj, 'method') obj.method('hello', 'world') expect(obj.method).toHaveBeenCalledWith(jasmine.any(String), 'world')
toHaveBeenCalledWith
is a method of a spy. So you can only call them on spy like described in the docs:
// your class to testvar Klass = function () {};Klass.prototype.method = function (arg) { return arg;};//the testdescribe("spy behavior", function() { it('should spy on an instance method of a Klass', function() { // create a new instance var obj = new Klass(); //spy on the method spyOn(obj, 'method'); //call the method with some arguments obj.method('foo argument'); //test the method was called with the arguments expect(obj.method).toHaveBeenCalledWith('foo argument'); //test that the instance of the last called argument is string expect(obj.method.calls.mostRecent().args[0] instanceof String).toBeTruthy(); });});