Problèmes avec la méthode Spyon Tohaveencaled de Jasmine
-
29-10-2019 - |
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
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é.