如何使用Protractor和/ chai-as-promised处理一系列承诺

时间:2015-01-09 17:02:33

标签: javascript angularjs cucumber protractor chai-as-promised

我正在使用量角器 CucumberJS chai-as-promised (假设CucumberJS没有内置断言库)建立自动化测试套件。

单个断言一切正常(使用chai-as-promised的 expect 功能)。但是,当试图在同一个测试中处理多个promise时,我遇到了麻烦(步骤)。在以下示例中,verifyUserFirstName返回映射到某行的承诺&t; td.getText()。

this.Then(/^I should see my user entry with proper values in the list$/, function (callback) {
    expect(usersPage.verifyUserFirstName('tony@gmail.com')).to.eventually.equal('Tony');
    expect(usersPage.verifyUserLastName('tony@gmail.com')).to.eventually.equal('Bui');
    expect(usersPage.verifyUserPhone('tony@gmail.com')).to.eventually.equal('8764309111');
    callback();

目前,当任何expect()行失败时,Protractor将退出并保持浏览器窗口挂起而不运行其余测试。

当只有一个expect()的步骤失败时(参见下面的示例),一切都很完美。它被记录为失败的步骤,并且量角器继续运行其余的测试以完成。有没有人经历过这个?

this.Then(/^I should be directed to the user list page$/, function (callback) {
    expect(browser.getCurrentUrl()).to.eventually.equal('http://localhost:9001/#/nav/').and.notify(callback);
});

1 个答案:

答案 0 :(得分:1)

我遇到了同样的挑战,这就是我解决的问题:

this.Then(/^I should see my user entry with proper values in the list$/, function (callback) {
    var verifyUser = Q.all([
        usersPage.verifyUserFirstName('tony@gmail.com'),
        usersPage.verifyUserLastName('tony@gmail.com'),
        usersPage.verifyUserPhone('tony@gmail.com')
    ]);
    expect(verifyUser).to.eventually.deep.equal(['Tony', 'Bui', '8764309111').and.notify(callback);
}

我希望有所帮助!