我正在使用量角器进行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!
});
答案 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;
});
});
现在在下一步功能中,用户名是更新后的用户名。