Comment puis-je réussir ce test sans recourir à des blocages/attentesPour des blocs?
it("cannot change timeout", function(done) {
request("http://localhost:3000/hello", function(error, response, body){
expect(body).toEqual("hello world");
done();
});
});
Demande d'extraction envoyée pour cette fonctionnalité ( https://github.com/mhevery/jasmine-node/pull/142 )
it("cannot change timeout", function(done) {
request("http://localhost:3000/hello", function(error, response, body){
expect(body).toEqual("hello world");
done();
});
}, 5000); // set timeout to 5 seconds
Vous pouvez (maintenant) le définir directement dans la spécification, conformément à Jasmine docs .
describe("long asynchronous specs", function() {
var originalTimeout;
beforeEach(function() {
originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
});
it("takes a long time", function(done) {
setTimeout(function() {
done();
}, 9000);
});
afterEach(function() {
jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
});
});
Pour définir le délai d'expiration global de Jasmine-Node, procédez comme suit:
jasmine.getEnv().defaultTimeoutInterval = timeoutYouWouldPrefer;// e.g. 15000 milliseconds
Nous remercions le développeur Gabe Hicks d’avoir découvert la partie .getEnv () via le débogage malgré les informations erronées contenues dans le README doc , qui affirme le faire en définissant jasmine.DEFAULT_TIMEOUT_INTERVAL.
Si vous souhaitez définir un délai d'expiration personnalisé pour un seul it (), vous pouvez essayer de passer le délai d'expiration (millisecondes) en tant que troisième argument (après l'instruction string et la fonction). Voici un exemple de cela ici , mais je ne sais pas ce qui se passerait si le délai d'attente personnalisé était plus long que celui par défaut de Jasmine. Je m'attends à ce que cela échoue.
On dirait que vous pouvez maintenant l'ajouter comme dernier argument de la fonction it
:
describe('my test', function(){
it('works', function(done){
somethingAsync().then(done);
}, 10000); // changes to 10 seconds
});
Dans Angular, mettez ceci en dehors de votre bloc de description:
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
Ceci s’applique à tous les tests du fichier .spec.ts
Pourquoi ne pas espionner setTimeout()
?
Quelque chose comme:
var spy = spyOn(window, 'setTimeout').andCallFake(function (func, timeout) {
expect(timeout).toEqual(2500);
func();
});
setTimeOut(function () { ... }, 2500);
expect(spy).toHaveBeenCalled();
L'ajout de jasmine.DEFAULT_TIMEOUT_INTERVAL = yourTime;
à un fichier d'assistance a fonctionné pour moi.