Question

Quelqu'un peut-il me dire pourquoi le test suivant échoue.

var Person = function() {};

Person.prototype.helloSomeone = function(toGreet) {
  return this.sayHello() + " " + toGreet;
};

Person.prototype.sayHello = function() {
  return "Hello";
};

describe("Person", function() {
 it("calls the sayHello() function", function() {
   var fakePerson = new Person();
   spyOn(fakePerson, "sayHello");
   fakePerson.helloSomeone("world");
   expect(fakePerson.sayHello).toHaveBeenCalled();
  });
});

Je l'ai pris de ici Et il a dit que cela fonctionnait. Je peux voir que la méthode Spyon crée une fonction de wrapper du même nom sur l'objet de la personne, c'est-à-dire FakePerson.Sayhello, est invoqué sur l'objet et non le prototype.

Merci beaucoup

Était-ce utile?

La solution

Les tests ont échoué parce que j'utilisais également Jasmine-Sinon.js.

Autres conseils

Un problème possible avec vos cas de test est que vous n'avez pas spécifié que la méthode d'origine doit être appelée. Ce qui aurait un comportement approprié est le suivant (notez le "et l'une à l'autre"):

describe("Person", function() {
 it("calls the sayHello() function", function() {
   var fakePerson = new Person();
   spyOn(fakePerson, "sayHello").andCallThrough();
   fakePerson.helloSomeone("world");
   expect(fakePerson.sayHello).toHaveBeenCalled();
  });
});

Vous pouvez voir la page de documentation de Jasmine pour plus d'informations sur l'autre possibilité: https://github.com/pivotal/jasmine/wiki/spies

EDIT: un rapide coup d'œil au Documentation du jasmin-sinon soulève ce qui suit:

Avertissement

Jasmine-Sinon écrase actuellement tous les matchs de jasmin du même nom utilisés pour ses propres fonctionnalités d'espionnage. Je prévois de permettre à ceux-ci d'être éventuellement conservés à l'avenir.

Les matchs natifs du jasmin qui sont écrasés sont:

  • tohaveeencalled ()
  • tohaveeencalledWith ()

Si vous souhaitez utiliser Jasmine-Sinon, vous devez utiliser leur API et non celle du jasmin.

Éditer: Février 2012:

Vous pouvez également utiliser des espions de jasmin aux côtés de vos espions Sinon. Jasmine-Sinon détectera ce que vous utilisez et utilisez le correspondant approprié.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top