代码之家  ›  专栏  ›  技术社区  ›  user3554664

你如何使用量角器和Chai等待承诺?

  •  0
  • user3554664  · 技术社区  · 10 年前

    我正在尝试使用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();
    

    并且只使用 assert 或 expect 在Gherkins Then子句中,但我想等待页面在给定或何时加载。

    1 回复  |  直到 10 年前
        1
  •  1
  •   Ram Pasala    10 年前

    我对你的问题的理解是,你想要异步 Given, When, Then's 在里面 CucumberJS 表现为同步执行,因此,一旦 browser.get(url) 完成,然后执行下一步定义。如果这就是你的问题 对 我们可以做到-

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

    我更喜欢 回来 当我使用.then函数和use对结果执行某些操作时 .done 当我不在的时候回调函数,你也不需要 callbacks 现在CucumberJS支持 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');
        });
    
    });