量角器:为什么黄瓜步骤显示在实际执行发生之前执行

时间:2017-03-29 07:13:49

标签: protractor cucumberjs

我是量角器黄瓜的新手。我试图从量角器conf.js执行下面的步骤定义。

this.Given(/^I go to sparqHomePage$/, function (callback) {

  homepage.goToHomePage()
  homepage.login(data[0].UserName,data[0].Password).then(callback);

});

this.Then(/^I create a process$/, function () {

  homepage.clickDesign();
  homepage.clickFlowDesigner();
  console.log(params.flow.procName + ' '+  params.flow.procDesc);
  designPage.createNewProc(params.flow.procName, params.flow.procDesc);

});

this.Then(/^I should see process is saved in db$/, function (callback) {

    var sql = "select * from process where name = ?";
    sql = mysql.format(sql, params.flow.procName);
    console.log(sql);

    dbConn.query(sql, function(err, rows, fields){

        if(!err) {
            procDbObj = rows;
            console.log(rows);
            expect(procDbObj[0].name).to.eventually.equal( params.flow.procName);
            expect(procDbObj[0].description).to.eventually.equal(params.flow.procDesc).and.notify(callback);
        }
    });
});

一旦我开始执行,控制台日志显示,功能文件执行完成,但实际执行尚未完成。

在我的第3步中,我正在根据步骤1和步骤2操作进行一些数据库验证。由于黄瓜试图在用浏览器完成实际执行之前执行所有步骤,我的第3次测试总是失败。

在进入下一步之前,如何让黄瓜等待步骤执行完毕。

2 个答案:

答案 0 :(得分:1)

你在打电话 homepage.goToHomePage()homepage.login(data[0].UserName,data[0].Password).then(callback);。两种方法都是正确处理的正确承诺吗?现在看起来它正在调用这两种方法,但在解析promise之前给出了直接的callback

正如罗斯所说,你也可以链接承诺,但首先要确保承诺得到正确处理

修改

正如罗斯所说,你也可以将承诺链接起来,但首先要确保承诺得到妥善处理。

您也可以返回承诺而不是回调,只需将其用作此

this.Given(/^I go to sparqHomePage$/, function () {
  homepage.goToHomePage();
  return homepage.login(data[0].UserName,data[0].Password);
});

答案 1 :(得分:0)

homepage.goToHomePage()
homepage.login(data[0].UserName,data[0].Password).then(callback);

我不确定第一行中到底发生了什么,但我认为这将是一次点击,你需要让它返回一个承诺并重新编写它

homepage.goToHomePage().then(()=>{
    homepage.login(data[0].UserName,data[0].Password).then(callback);
})

然后按照此模式查看其余代码,因为我可以在整个

中看到同样的问题