Running spec after promise has been resolved

2019-05-31 10:58发布

问题:

I came across an issue with running a spec that should be executed after a promise has been resolved. See the commented simplified example below.

I tried using IIFE or calling done() function in the spec but none of these seemed to work.

// getIds() is a simple promise which returns an array of ids
getIds().then(function (ids) {
    console.log('IDS: ' + ids); // all good so far

    // This test is never run
    it('dummy test', function () { 
        console.log('TEST HAS BEEN RUN');
    });
});

回答1:

You can use browser.wait() to wait until your promise is complete. Or you can put your test inside the then block:

it('should test', function() {
  getIds().then(function (ids) {
    // some action.
    expect()...
  });
});

Also, you can put the promise in a beforeEach or a beforeAll (jasmine 2). Assign the ids to a variable declared inside a describe. The value should be available for your test to use.