2017-08-08 2 views
3

J'ai une méthode qui est appelée en utilisant un d3 timer. Chaque fois que la méthode est appelée, la méthode émet un objet avec un couple de valeurs. L'une des valeurs augmente avec le temps. Je voudrais écrire un test pour vérifier si les valeurs sont dans l'ordre ascendant ou non (c'est-à-dire, augmenter avec le temps ou non). Donc, pour y faire face, Dans mon test, je suis abonné à l'émetteur de l'événement et dans l'abonnement, je pousse l'objet que je reçois dans un tableau local. Et puis, je m'attends à ce que le array[i] soit inférieur au array[i+1]. Je pense que ma logique est parfaitement correcte mais je ne suis pas sûr pourquoi je reçois une erreur de Jasmine en disant que the spec has no expectations même si j'en ai un.Spec n'a pas d'attentes - Jasmine tester la fonction de rappel

Voici le code:

let x = d3.timer((elapsed) => { 
    this.method(); // call the function 
    if(elapsed >= 500) { 
    x.stop(); // stops the timer. 
    } 
}); 

method(elapsed) { 
// do something 
if(elapsed > 500) { 
    this.output.emit({x: somevalue, y: somevalue, f: increasingvalue }); 
} 
} 

Jasmine Spec:

it('my spec', inject([JumpService], (service: JumpService) =>{ 
    array = []; 
    //service calls the method 
    service.output.subscribe(e => { 
    array.push(e); 
    // A console statement here will give me the length and the object pushed. 
    for(let i = 0; i< array.length - 1; i++) { 
    expect(array[i].f).toBeLessThan(array[i+1].f); 
    } 

    }); 

})); 

que je fais quelque chose de mal ici? Comment puis-je m'attaquer à un tel scénario? S'il vous plaît, guidez-moi dans la bonne direction.

Merci.

Répondre

1

En général, lors du test des fonctions de rappel asynchrones, il est toujours important d'attendre les sorties du test après la résolution des promesses. Vous pouvez utiliser le cadre de banc d'essai angulaire de tick() avec le fakeAsync() ou vous pouvez simplement fallback à façon générale de Jasmine de tester les méthodes asynchrones en utilisant done()

En utilisant done():

it('my spec', (done) => { 
    array = []; 
    service.output.subscribe(e => { 
    array.push(e); 
    for(let i = 0; i< array.length - 1; i++) { 
    expect(array[i].f).toBeLessThan(array[i+1].f); 
    } 
    done(); 
    }); 
}); 

espoir cette réponse aide.

Note: Je n'ai pas eu beaucoup de chance avec les fakeAsync() et tick(), donc je ne l'ai pas inclus dans la réponse. Désolé pour ça.

+0

Damnnn. done() travaillé. Si simple. Merci beaucoup. J'ai abandonné complètement. À votre santé. – zelda