Примечание : приведенный ниже пример для старой версии cucumber-js: 1.3.3.
С cucumber.js, когда вы ссылаетесь на this
изнутри определений шагов, вы фактически ссылаетесь на контекст World. Таким образом, для правильной работы this.page.addvalues.addValues(x,y);
сначала необходимо создать page
, который имеет ссылку на ваш addvalues.js
. Что-то вроде этого:
world.js:
function CustomWorld() {
console.log('overriding the world')
this.page = {
addvalues: require('../page-objects/addvalues')
}
}
module.exports = function() {
this.World = CustomWorld;
};
addvalues.js:
//addvalues.js
module.exports = {
addValues(x,y){
var total = x + y ;
return total ;
}
};
В вашем steps.js
.
также есть пара вещей, которые нужно исправить.
- Не передавайте функции стрелок в действия, так как это удалит контекст
this
, который вы устанавливаете в World.js.
- Если вы хотите разделить переменные между шагами (как вы делаете в вашем примере), вам нужно где-то их хранить. Одним из таких мест, опять же, был бы контекст мира. Обратите внимание, как в моей версии я установил
this.prevResult
- Когда переменные вводятся в ваши шаги, они вводятся как строки. Обратите внимание на
parseInt()
в моей версии.
addvalues-steps.js:
const expect = require('chai').expect;
module.exports = function() {
this.When(/^Add two values (-?\d+) and (-?\d+)$/, function (x, y) {
this.prevResult = this.page.addvalues.addValues(parseInt(x, 10), parseInt(y, 10));
})
this.Then(/^I should get result (-?\d+)$/, function (ans) {
let tot = this.prevResult;
expect(tot).to.be.eql(parseInt(ans, 10));
})
}
UPD: Оказывается, речь идет о selenium-cucumber-js , который является основой поверх cucumber-js
. Не обращайте внимания на комментарии о world.js
.
Согласно selenium-cucumber-js
документам, вам не нужно this
для доступа к объектам страницы в определениях ваших шагов:
Объекты страницы доступны через глобальный объект страницы и
автоматически загружается с ./page-objects
.
const expect = require('chai').expect;
module.exports = function() {
this.When(/^Add two values (-?\d+) and (-?\d+)$/, function (x, y) {
this.prevResult = page.addvalues.addValues(parseInt(x, 10), parseInt(y, 10));
})
this.Then(/^I should get result (-?\d+)$/, function (ans) {
let tot = this.prevResult;
expect(tot).to.be.eql(parseInt(ans, 10));
})
}