user2379867
user2379867

Reputation:

understanding promises/control flow in protractor/jasmine

I have a rest class that looks like this:

class UserAPI {
  create() {
       request.post(users_api)
           .set('Content-Type', 'application/json')
           .set('Authorization', auth)
           .send(userData)
           .end(function(error, response) {
               if(error) {
                   console.log("CreateUsers error = ", error);
               } else {
                   console.log(response.body);
                   return(response.body);
               }
           });
  }
}
module.exports = UserAPI;

I am using in my test like this:

let HomePage = require('../lib/pages/homePage.js');
let LoginPage = require('../lib/pages/loginPage.js');
let UserAPI = require('../lib/restapi/user.js');
let userAPI = new UserAPI();
var myUser;
let homePage, loginPage;

describe('Login', function() {


    beforeEach(function() {
        myUser = userAPI.create();
        homePage = new HomePage();
        loginPage = new LoginPage();
        homePage.visit();
        ...
    });

    it('Test', function() {
        ...    
    });
});

The rest calls works but executes at the end of the test. What I am trying to do is have myUser = userAPI.create(); execute before homePage = new HomePage(); I tried using then, fulfill, done, etc without success. Still having some trouble understanding promises and control flow. If anyone can help clarify with my example code I would greatly appreciate it. Thanks.

Upvotes: 1

Views: 388

Answers (1)

Sudharsan Selvaraj
Sudharsan Selvaraj

Reputation: 4832

inside UserAPI.create() method you need to create a promise and resolve it once the response is received from the API call.

class UserAPI {
  create() {
  var defer = protractor.promise.defer();
   request.post(users_api)
       .set('Content-Type', 'application/json')
       .set('Authorization', auth)
       .send(userData)
       .end(function(error, response) {
           if(error) {
                console.log("CreateUsers error = ", error);
             defer.reject(error)
           } else {
               console.log(response.body);
               //return(response.body);
               defer.fulfill(response.body);
           }
       });
    return defer.promise();
  }
}
module.exports = UserAPI;

Upvotes: 1

Related Questions