Reputation:
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
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