web-dev-qa-db-fra.com

Comment modifier le délai d'expiration d'une spécification asynchrone de noeud de jasmin

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();
     });
});
63
Brian Low

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
62
Brian Low

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;
    });
});
80
Francisco

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.

42
Colin May

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
});
18
d-_-b

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

2
danday74

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();
1
ggozad

L'ajout de jasmine.DEFAULT_TIMEOUT_INTERVAL = yourTime; à un fichier d'assistance a fonctionné pour moi.

0
Ivan Rangel