Javascript 量角器BDD测试在执行前显示通过
我有一个样本BDD测试使用黄瓜量角器。在执行代码时,控制台立即将结果显示为已传递,并且代码实际上仅在传递之后才开始执行 我希望执行状态显示与实际执行同步。(例如控制台显示-‘给定我启动了量角器演示页面’,下面的代码被执行,然后控制台显示下一步等等)我知道这与异步编码和回调有关,但无法找出确切的问题 功能文件:Javascript 量角器BDD测试在执行前显示通过,javascript,cucumber,protractor,bdd,Javascript,Cucumber,Protractor,Bdd,我有一个样本BDD测试使用黄瓜量角器。在执行代码时,控制台立即将结果显示为已传递,并且代码实际上仅在传递之后才开始执行 我希望执行状态显示与实际执行同步。(例如控制台显示-‘给定我启动了量角器演示页面’,下面的代码被执行,然后控制台显示下一步等等)我知道这与异步编码和回调有关,但无法找出确切的问题 功能文件: Feature: Test Scenario: Test Scenario Given I launch the protractor demo page When I
Feature: Test
Scenario: Test Scenario
Given I launch the protractor demo page
When I enter two in the first field
And I enter three in the second field
And I click Go button
Then Result should be displayed as Five
步骤文件:
var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
var expect = chai.expect;
module.exports = function () {
this.Given(/^I launch the protractor demo page$/, function (callback) {
browser.driver.manage().window().maximize();
browser.get('http://juliemr.github.io/protractor-demo/');
browser.getTitle().then(function(text){
console.log('title is - ' + text);
expect(text).to.equal('Super Calculator');
});
callback();
});
this.When(/^I enter two in the first field$/, function (callback) {
element(by.model('first')).sendKeys('2');
callback();
});
this.When(/^I enter three in the second field$/, function (callback) {
element(by.model('second')).sendKeys('3');
callback();
});
this.When(/^I click Go button$/, function (callback) {
element(by.id('gobutton')).click();
callback();
});
this.Then(/^Result should be displayed as Five$/, function (callback) {
element(by.repeater('result in memory')).all(by.tagName('td')).get(2).getText().then(function(text){
expect(text).to.equal('5');
});
callback();
});
};
您需要返回承诺,或者在步骤定义中使用done
回调。否则cucumber不知道你的异步
行动已经完成
我有同样的问题,上面的陈述是github论坛的一位核心成员的回应
当我使用对结果执行某些操作时,我更喜欢返回承诺。然后函数并使用。当我不在时,完成回调函数,您也不需要回调
现在CucumberJS
支持承诺。因此,您的step文件应该如下所示-
var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
var expect = chai.expect;
module.exports = function () {
this.Given(/^I launch the protractor demo page$/, function () {
browser.driver.manage().window().maximize();
browser.get('http://juliemr.github.io/protractor-demo/');
return browser.getTitle().then(function(text){
console.log('title is - ' + text);
expect(text).to.equal('Super Calculator');
});
});
this.When(/^I enter two in the first field$/, function () {
return element(by.model('first')).sendKeys('2');
});
this.When(/^I enter three in the second field$/, function () {
return element(by.model('second')).sendKeys('3'); // you can use return also
});
this.When(/^I click Go button$/, function () {
return element(by.id('gobutton')).click();
});
this.Then(/^Result should be displayed as Five$/, function () {
return element(by.repeater('result in memory')).all(by.tagName('td')).get(2).getText().then(function(text){
expect(text).to.equal('5');
});
});
};
我建议您阅读承诺
,因为这需要了解它们的行为。它们有时会很棘手,我花了一段时间才有了一个想法,但我还有很多东西要学:)量角器版本是3.3.0尝试@igniteram1给出的解决方案。前两个步骤与之前一样执行,即在实际执行开始之前,它们显示通过。。转到第三步,脚本错误消息“函数在5000毫秒后超时”这很奇怪,尝试增加默认超时,并在前两步中使用return。我更新了我的答案,您不应该在步骤中使用maximize和get url,这些应该是onPrepare
或hooksGlad之前的的一部分!请接受答案,因为它会帮助其他有相同问题的人:)