如何在黄瓜测试中传递整数值并验证结果

时间:2018-11-13 03:39:04

标签: javascript cucumber cucumberjs

如何调用简单的加法函数并使用selenium-cucumber-js框架声明以下两个测试的结果来声明两个值的结果。在运行以下内容时说 TypeError:TypeError:无法读取未定义的属性“ addvalues” 在createWorld.When(C:\ Tests \ cucumber \ step-definitions \ addvalues-steps.js:5:25)

Feature:
 Scenario: Addition of two values   
        When Add two values 5 and 10
        Then I should get result 15

//这是我的'addvalues-steps.js'文件

const expect = require('chai').expect;
module.exports = function () {  

    this.When(/^Add two values (-?\d+) and (-?\d+)$/, (x, y) =>{
        this.page.addvalues.addValues(x,y); 
    })

    this.Then(/^I should get result (-?\d+)$/, (ans) =>{
    let tot =  this.page.addvalues.addValues(x, y); 
        expect(tot).to.be.eql(ans);     
    })
};

//以下是我的“ addvalues.js文件”

module.exports = {    
   addValues(x,y){
    var total = x + y ;   
    return  total ;        
     }  
};

// world.js >>

const { CustomWorld } = require('cucumber')
function CustomWorld() {
    console.log('overriding the world')
    this.page = {
        addvalues: require('../page-objects/addvalues')
    }
    console.log("This is the recent error log:"+this.page.addvalues)        

}

module.exports = function() {
    this.World = CustomWorld;

enter image description here

1 个答案:

答案 0 :(得分:2)

注意:以下示例适用于旧版本的cucumber-js:1.3.3。 使用Cucumber.js,当您从步骤定义内部引用this时,实际上是在引用World上下文。因此,为了使this.page.addvalues.addValues(x,y);正常工作,您首先需要创建引用了page的{​​{1}}。遵循以下原则:

world.js:

addvalues.js

addvalues.js:

function CustomWorld() {
    console.log('overriding the world')
    this.page = {
        addvalues: require('../page-objects/addvalues')
    }
}

module.exports = function() {
    this.World = CustomWorld;
};

您的//addvalues.js module.exports = { addValues(x,y){ var total = x + y ; return total ; } }; 中还有两件事需要纠正。

  1. 请勿将箭头功能传递到步骤中,因为这将删除您在World.js中设置的steps.js上下文。
  2. 如果要在步骤之间共享变量(如您在示例中所做的那样),则需要将它们存储在某个位置。同样,世界背景就是其中之一。请注意在我的版本中如何设置this
  3. 将变量注入到您的步骤中时,它们将作为字符串注入。请注意我的版本中的this.prevResult

addvalues-steps.js:

parseInt()

UPD::事实证明,问题与selenium-cucumber-js有关,{{3}}是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)); }) } 之上的框架。忽略关于cucumber-js的评论。

根据world.js文档,您不需要selenium-cucumber-js即可访问步骤定义中的页面对象:

  

页面对象可通过全局页面对象访问,并且   从this自动加载。

./page-objects