How do I change the timeout on a jasmine-node async spec

node.jsJasmine

node.js Problem Overview


How can I get this test to pass without resorting to runs/waitsFor blocks?

it("cannot change timeout", function(done) {

     request("http://localhost:3000/hello", function(error, response, body){
        
         expect(body).toEqual("hello world");

         done();
     });
});

node.js Solutions


Solution 1 - node.js

You can (now) set it directly in the spec, as per 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;
    });
});

Solution 2 - node.js

Sent pull request for this feature (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

Solution 3 - node.js

To set the global Jasmine-Node timeout, do this:

jasmine.getEnv().defaultTimeoutInterval = timeoutYouWouldPrefer;// e.g. 15000 milliseconds

Credit to developer Gabe Hicks for figuring out the .getEnv() part via debugging in spite of misinformation in the README doc which claims it's done by setting jasmine.DEFAULT_TIMEOUT_INTERVAL.

If you want to set a custom timeout just for one it(), you could try passing the timeout (milliseconds) as a third argument (after the string statement and the function). There's an example of that being done here, but I'm not sure what would happen if the custom timeout was longer than Jasmine's default. I expect it would fail.

Solution 4 - node.js

Looks like you can now add it as the last argument for the it function:

describe('my test', function(){
    it('works', function(done){
        somethingAsync().then(done);
    }, 10000); // changes to 10 seconds
});

Solution 5 - node.js

In Angular, put this outside your describe block:

jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;

This applies to all the tests in the .spec.ts file

Solution 6 - node.js

Put it after describe statement:

describe("A saves to DB", function() {
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;

Solution 7 - node.js

Adding: jasmine.DEFAULT_TIMEOUT_INTERVAL = yourTime; on a helper file worked for me.

Solution 8 - node.js

In my case I had multiple tests cases and while I was using the aforementioned solution with was using the:

    beforeEach(function() {
        originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
        jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
    });

the DEFAULT_TIMEOUT_INTERVAL was not updated at the first test case, so I had to add this:

  beforeAll(() => {
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
  })

to my code to successfully run all the tests.

Solution 9 - node.js

To do this globally for all of your tests (in the case of e2e or integration testing) you can use a helper.

A helper file when configured correctly should get loaded before the tests are executed and allow you to change the DEFAULT_TIMEOUT_INTERVAL globally:

spec/support/jasmine.json

{
    ...
    "helpers": [
        "/path/to/helpers/**/*.ts"
    ]
}

helpers/timeout.ts

jasmine.DEFAULT_TIMEOUT_INTERVAL = 300000;

Solution 10 - node.js

Why not by spying on setTimeout()?

Something like:

var spy = spyOn(window, 'setTimeout').andCallFake(function (func, timeout) {
    expect(timeout).toEqual(2500);
    func();
});

setTimeOut(function () { ... }, 2500);
expect(spy).toHaveBeenCalled();

Solution 11 - node.js

Change j$.DEFAULT_TIMEOUT_INTERVAL to 10000 in following file: npm\node_modules\jasmine-core\lib\jasmine-core

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBrian LowView Question on Stackoverflow
Solution 1 - node.jsFranciscoView Answer on Stackoverflow
Solution 2 - node.jsBrian LowView Answer on Stackoverflow
Solution 3 - node.jsColin MayView Answer on Stackoverflow
Solution 4 - node.jsd-_-bView Answer on Stackoverflow
Solution 5 - node.jsdanday74View Answer on Stackoverflow
Solution 6 - node.jsMichał KulińskiView Answer on Stackoverflow
Solution 7 - node.jsIvan RangelView Answer on Stackoverflow
Solution 8 - node.jsAndreas FoteasView Answer on Stackoverflow
Solution 9 - node.jsbobbyg603View Answer on Stackoverflow
Solution 10 - node.jsggozadView Answer on Stackoverflow
Solution 11 - node.jssharaj rewooView Answer on Stackoverflow