Je publie cette réponse pour répondre au commentaire du code de l'OP @Tri-Vuong - qui était la raison principale de ma visite sur cette page :
Je veux passer outre l'espion ... ici et le faire un peu différemment.
Aucune des réponses données jusqu'à présent n'aborde ce point. Je vais donc publier ce que j'ai appris et résumer également les autres réponses.
@Alissa l'a dit correctement quand elle a expliqué pourquoi c'est une mauvaise idée de fixer isSpy
à false
- espionnage effectif d'un espion, ce qui a pour conséquence que le comportement d'autodestruction de Jasmine ne fonctionne plus comme prévu. Sa solution (placée dans le contexte de l'OP et mise à jour pour Jasmine 2+) était la suivante :
beforeEach(() => {
var spyObj = spyOn(obj,'methodName').and.callFake(function(params){
}) // @Alissa's solution part a - store the spy in a variable
})
it("should do the declared spy behavior", () => {
// Act and assert as desired
})
it("should do what it used to do", () => {
spyObj.and.callThrough(); // @Alissa's solution part b - restore spy behavior to original function behavior
// Act and assert as desired
})
it("should do something a little differently", () => {
spyObj.and.returnValue('NewValue'); // added solution to change spy behavior
// Act and assert as desired
})
La dernière it
Le test démontre comment on peut changer le comportement d'un espion existant en quelque chose d'autre que le comportement original : " and
-déclare" le nouveau comportement sur le spyObj précédemment stocké dans la variable de l'objet beforeEach()
. Le premier test illustre mon cas d'utilisation : je voulais qu'un espion se comporte d'une certaine manière pour la plupart des tests, mais qu'il change ensuite pour quelques tests.
Pour les versions antérieures de Jasmine, changez les appels appropriés à .andCallFake(
, .andCallThrough()
y .andReturnValue(
respectivement.
4 votes
Vous êtes sûr d'avoir choisi la bonne réponse "correcte" ?
3 votes
A partir de Jasmine 2.0 "Un espion n'existe que dans le
describe
oit
bloc dans lequel il est défini, et sera supprimé après chaque spéculation".