Comment puis-je faire réussir ce test sans recourir aux blocs runs / waitsFor?
it("cannot change timeout", function(done) {
request("http://localhost:3000/hello", function(error, response, body){
expect(body).toEqual("hello world");
done();
});
});
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
valeur a fait l'affaire pour moi sur une toute nouvelle configuration construite à partir de zéro en utilisant Jasmine + Jest. Cela fonctionne comme prévu.it
. Au moment où vous êtes dans le test,done
semble avoir déjà accroché à tout ce quiDEFAULT_TIMEOUT_INTERVAL
était avant deit
commencer.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
la source
Pour définir le délai d'expiration global Jasmine-Node, procédez comme suit:
jasmine.getEnv().defaultTimeoutInterval = timeoutYouWouldPrefer;// e.g. 15000 milliseconds
Nous remercions le développeur Gabe Hicks pour avoir compris la partie .getEnv () via le débogage malgré la désinformation dans le document README qui prétend que c'est fait en définissant jasmine.DEFAULT_TIMEOUT_INTERVAL.
Si vous souhaitez définir un délai d'expiration personnalisé uniquement pour un it (), vous pouvez essayer de passer le délai d'expiration (millisecondes) comme troisième argument (après l'instruction de chaîne et la fonction). Il y a un exemple de cela fait ici , mais je ne suis pas sûr de ce qui se passerait si le délai d'expiration personnalisé était plus long que la valeur par défaut de Jasmine. Je pense que cela échouerait.
la source
jasmine.DEFAULT_TIMEOUT_INTERVAL = 12000;
un fichier de configuration globale que j'utilise pour tous les tests et cela fonctionne comme prévu.On dirait que vous pouvez maintenant l'ajouter comme dernier argument de la
it
fonction:describe('my test', function(){ it('works', function(done){ somethingAsync().then(done); }, 10000); // changes to 10 seconds });
la source
Dans Angular, mettez ceci en dehors de votre bloc describe:
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
Cela s'applique à tous les tests du fichier .spec.ts
la source
Mettez-le après la
describe
déclaration:describe("A saves to DB", function() { jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
la source
Ajout:
jasmine.DEFAULT_TIMEOUT_INTERVAL = yourTime;
sur un fichier d'aide a fonctionné pour moi.la source
Pourquoi pas en espionnant
setTimeout()
?Quelque chose comme:
var spy = spyOn(window, 'setTimeout').andCallFake(function (func, timeout) { expect(timeout).toEqual(2500); func(); }); setTimeOut(function () { ... }, 2500); expect(spy).toHaveBeenCalled();
la source
Dans mon cas, j'ai eu plusieurs cas de tests et pendant que j'utilisais la solution susmentionnée, j'utilisais:
beforeEach(function() { originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000; });
le DEFAULT_TIMEOUT_INTERVAL n'a pas été mis à jour lors du premier cas de test, j'ai donc dû ajouter ceci:
beforeAll(() => { jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000; })
à mon code pour exécuter avec succès tous les tests.
la source
Remplacez j $ .DEFAULT_TIMEOUT_INTERVAL par 10000 dans le fichier suivant: npm \ node_modules \ jasmine-core \ lib \ jasmine-core
la source