我是量角器黄瓜的新手。我试图从量角器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次测试总是失败。
在进入下一步之前,如何让黄瓜等待步骤执行完毕。
答案 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);
})
然后按照此模式查看其余代码,因为我可以在整个
中看到同样的问题