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

Protractor 量角器:为什么黄瓜步骤在实际执行之前显示为已执行,protractor,cucumberjs,Protractor,Cucumberjs,我不熟悉量角器黄瓜。我正在尝试执行以下步骤定义,该定义来自于dragrator 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$/, functio

我不熟悉量角器黄瓜。我正在尝试执行以下步骤定义,该定义来自于dragrator 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);
        }
    });
});
当我开始执行时,控制台日志显示,功能文件执行已经完成,但实际执行尚未完成

在我的第三步中,我将根据步骤1和步骤2的操作进行一些db验证。当cucumber试图在使用browser完成实际执行之前执行所有步骤时,我的第三个测试总是失败

如何使Cumber在进入下一步之前等待步骤执行完成

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);
})
然后在代码的其余部分遵循此模式,因为我可以在整个调用过程中看到相同的问题
homepage.goToHomePage()
homepage.login(数据[0]。用户名,数据[0]。密码)。然后(回调)。这两种方法是否都是正确的承诺,并且都得到了正确的处理?它现在看起来像是在调用这两个方法,但在解析承诺之前给出了一个直接的
回调

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

编辑:

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

您也可以返回承诺而不是回调,只需按如下方式使用它

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