【问题标题】:JavaScript loop an array - ReferenceError | i is not definedJavaScript 循环数组 - ReferenceError |我没有定义
【发布时间】:2019-04-20 11:39:58
【问题描述】:

这里是 JavaScript 和 Postman 的新手。

我在 postman 中设置了一个基本测试,使用 JS 来比较 Web 响应中的名称和数据文件中的名称。名称数组位于外部数据 csv 文件中。

我想循环遍历数组,但出现错误:

"ReferenceError | i is not defined"

代码:

var newResponse = responseBody;

let nameArray = data.name;

for (let i = 0; i < nameArray.length; i++) {
  console.log(nameArray.length);
}

pm.test("Web vs. Data: Person", function() {
  pm.expect(newResponse.Item[i].name).to.equal(nameArray.Item[i].person);
});

console.log(newResponse.Item[i].name);
console.log(nameArray.Item[i].person);

【问题讨论】:

  • 你能不能用pm.iterationData.get('name')从数据文件中获取值,我真的不明白你为什么在你为什么这样循环?

标签: javascript arrays for-loop automated-tests postman


【解决方案1】:

您的结束范围“}”字符丢失,请使用此代码进行更改;

var newResponse = responseBody;

let nameArray = data.name;

for (let i = 0; i < nameArray.length; i++) {

    console.log(nameArray.length);

    pm.test("Web vs. Data: Person", function () {
        pm.expect(newResponse.Item[i].name).to.equal(nameArray.Item[i].person);

    });

    console.log(newResponse.Item[i].name);
    console.log(nameArray.Item[i].person);
}

【讨论】:

    【解决方案2】:

    let 是块作用域,因此它会导致 ReferenceError 超出for 循环。变量i 不会在for 循环之外引用。因此,您必须将代码块移动到 for 循环中,如下所示。希望这会有所帮助:)

    var newResponse = responseBody;
    let nameArray = data.name;
    
    for(let i = 0; i < nameArray.length; i++){
      console.log(nameArray.length);
      pm.test("Web vs. Data: Person" ,function(){
      pm.expect(newResponse.Item[i].name).to.equal(nameArray.Item[i].person);
      });
    
      console.log (newResponse.Item[i].name);
      console.log(nameArray.Item[i].person); 
    }
    

    【讨论】:

    • 我试过这个,但我现在得到一个错误'不要在循环中创建函数'。感谢您的快速帮助。
    • @Bill_Martin 看看这里stackoverflow.com/questions/10320343/… 这将对您有所帮助,需要将函数移出循环并从循环中调用它,并以i 递增值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 2016-01-02
    • 2020-07-13
    • 1970-01-01
    • 2011-09-28
    • 2021-08-22
    相关资源
    最近更新 更多