Search code examples
javascriptautomationcucumbereslintfor-in-loop

eslint error "guard-for-in" not clear how to work with for-in


I'm working with cucumber js and I want to fill out some fields in an application, so i'm using a for-in to get the data from the rowHash but i'm getting the error message "The body of a for-in should be wrapped in an if statement to filter unwanted properties from the prototype guard-for-in" i'm not sure how I should code my for-in with the if inside the for.

this is my code:

this.fillRequiredfields = function(dataTable){
  var rows = dataTable.rowsHash();
  for (var row in rows) {
    var val = rows[row];

    if (row === 'firstname') {
      element(by.name('firstName')).sendKeys(val).isPresent();
    }
    if (row === 'lastname') {
      element(by.name('lastName')).sendKeys(val).isPresent();
    }
    if (row === 'emailaddress') {
      element(by.name('emailAddress')).sendKeys(val).isPresent();
    }
    if (row === 'displayname') {
      element(by.name('displayName')).sendKeys(val).isPresent();
    }
    if (row === 'password') {
      element(by.name('newPassword')).sendKeys(val).isPresent();
    }
  }
};

So when I try to do the commit in git i'm getting the "guard-for-in" from eslint. If somebody can explain me how I should do the if in the for-in that could be good.

Hope you can help me.


Solution

  • I already solve this, in my case the solution was:

    instead of

    var val = rows[row];
    

    I add the if with the hasOwnProperty(), like this:

    if (rows.hasOwnProperty(row))
    

    So the code is like this:

    for (var row in rows) {
      if (rows.hasOwnProperty(row)){
    
        if (row === 'firstname') {
          element(by.name('firstName')).sendKeys(rows[row]).isPresent();
        }
        if (row === 'lastname') {
          element(by.name('lastName')).sendKeys(rows[row]).isPresent();
        }
        if (row === 'emailaddress') {
          element(by.name('emailAddress')).sendKeys(rows[row]).isPresent();
        }
        if (row === 'displayname') {
          element(by.name('displayName')).sendKeys(rows[row]).isPresent();
        }
        if (row === 'password') {
          element(by.name('newPassword')).sendKeys(rows[row]).isPresent();
        }
      }
    }
    

    Hope can help to somebody else.