81 votes

Utilisation de types d'objets avec la méthode toHaveBeenCalledWith de Jasmine

Je viens de commencer à utiliser Jasmine, veuillez donc pardonner la question des débutants, mais est-il possible de tester les types d'objets lors de l'utilisation de toHaveBeenCalledWith ?

 expect(object.method).toHaveBeenCalledWith(instanceof String);

Je sais que je pourrais cela, mais il vérifie la valeur de retour plutôt que l'argument.

 expect(k instanceof namespace.Klass).toBeTruthy();

128voto

Wolfram Arnold Points 3490

J'ai découvert un mécanisme encore plus cool, en utilisant jasmine.any() , car je trouve que le fait de séparer les arguments à la main n'est pas optimal pour la lisibilité.

Dans 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')

59voto

Andreas Köberle Points 16453

toHaveBeenCalledWith est une méthode d'espionnage. Vous ne pouvez donc les appeler qu'en espion comme décrit dans la doc :

 // your class to test
var Klass = function () {
};

Klass.prototype.method = function (arg) {
  return arg;
};


//the test
describe("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();
  });

});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X