Using object types with Jasmine's toHaveBeenCalledWith method Using object types with Jasmine's toHaveBeenCalledWith method javascript javascript

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();  });});