0

我正在尝试使用 Cucumber、Chai 和 Protractor 等待承诺解决方案。有没有办法使用 Chai 在发送回调之前等待某些事情(如页面加载)发生?

我想要类似的东西:

browser.get(url).then(callback)

我以为会在柴:

browser.get(url).should.be.fulfilled.and.notify(callback);

虽然当我这样做时,我只是超时,但我看到页面已经加载。我已经设置好了:

var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
var expect = chai.expect;
var should = chai.should;

我不想检查什么,我只想确保页面加载。据我所见,大多数人只是这样做:

browser.get(url);
callback();

并且只在 Gherkins Then 子句中使用assertor expect,但我想等待页面在 Given 或 When 中加载。

4

1 回答 1

1

我对您的问题的理解是您希望异步Given, When, Then's输入CucumberJS表现为同步执行,因此一旦您的步骤browser.get(url)完成,则执行下一步定义。如果那是您的问题,那么的,我们可以这样做-

您需要在步骤定义中return做出承诺或使用done回调。否则 cucumber 不知道您的异步操作何时完成。

return当我使用 .then 函数对结果执行一些操作时,我更喜欢承诺,而当我不是时,我更喜欢使用.done回调函数,而且你现在不需要callbacksCucumberJS 支持promises。所以你的步骤文件应该看起来像 -

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 () {
   return browser.get('http://juliemr.github.io/protractor-demo/');
    });
});

this.When(/^I check the title of the page$/, function () {
   return browser.getTitle().then(function(text){
       console.log('title is - ' + text);
        expect(text).to.equal('Super Calculator');
    });

});
于 2016-08-17T15:52:50.097 回答