了解量角器/茉莉花中的承诺/控制流程

时间:2016-09-24 23:23:52

标签: jasmine protractor

我有一个看起来像这样的休息类:

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;

我在我的测试中使用这样:

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() {
        ...    
    });
});

其余调用有效,但在测试结束时执行。我想要做的是拥有myUser = userAPI.create();在homePage = new HomePage()之前执行;我尝试使用,完成,完成等没有成功。理解承诺和控制流程仍然有些困难。 如果有人可以帮助澄清我的示例代码,我将非常感激。谢谢。

1 个答案:

答案 0 :(得分:1)

UserAPI.create()方法内部,您需要创建一个承诺,并在从API调用收到响应后解析它。

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;