从promise开始返回后,更改的值将丢失

时间:2018-01-24 14:58:19

标签: protractor es6-promise

我正在使用量角器进行E2E测试,使用黄瓜进行测试。 我面临一个奇怪的问题:我失去了我在承诺中设定的价值观。

我做错了什么? 我的step-file.js:

var loggedUser = new User("dummyname", "dummyrole"); 

this.When(/^I click on a user name$/, function(){
      userelem.element(by.className('username')).getText().then(function (txt) {
        loggedUser.username = txt;
      });
});

this.Then(/^The username of the object "loggedUser" is set to a new value$/, function(){
    var answer = "dummyname" != loggedUser.username;
    assert.isOk(answer, "username is still dummyname!"); //this line fails since usrname is set back to dummyname again!
});

2 个答案:

答案 0 :(得分:0)

根本原因是您需要让每个步骤定义返回一个承诺,我为您编写一个简单的代码并且它运行良好。

JCheckBox

对于黄瓜2:

Make step definition return a promise is the key point

对于黄瓜1:

var { defineSupportCode } = require("cucumber");

defineSupportCode(function({ Given, When, Then }) {
    let title = 'test';

    Given(/^open npmjs.com$/, function() {
        browser.get("http://www.npmjs.com");
        return browser.getTitle().then(function(title1){
            title = title1;
            console.log('title: ' + title);
        });
    });

    Then(/^verify page title$/, function() {
        return expect(title).to.equal('npm');
    });
});

答案 1 :(得分:0)

感谢@yong关于我的第一篇文章的建议(我已将其删除)。最后我理解你的意思。这是解决方案:
(而不是升级到黄瓜2,)我从“When-Step”中“返回”承诺,以便量角器在执行下一步功能之前等待它完全填充:

var loggedUser = new User("dummyname", "dummyrole"); 

this.When(/^I click on a user name$/, function(){
      return userelem.element(by.className('username')).getText().then(function (txt) {
              loggedUser.username = txt;
      });
});

现在在下一步功能中,用户名是更新后的用户名。