Cucumber JS:我得到了一个" table.rows()"不是一个有效的功能"将表和另一个变量传递给步骤def

时间:2018-04-29 23:58:00

标签: javascript protractor cucumberjs

我正在尝试验证从黄瓜数据表到前端的值。当我只将数据表传递给我的步骤def但是当我将变量与数据表一起传递时,测试工作正常;测试中断并给出错误" table.rows()不是有效的函数"

以下是功能文件:

然后是学生的学生信息" 1761"在学生列表页面中应该是正确的

|名称| ID |部门#| | Monnie | 123 | 1761 |

步骤定义:

Then(/^the student info for student "([^"]*)" should be correct in the fund list page$/, function (table, studNumber) {
let testTable = table.rows();
return this.pages.prd2Page.getCellInfo(studNumber).then((actualTexts) => {

return assert.deepEqual(testTable.toString(), actualTexts.toString());
//return console.log(actualTexts.toString());
});
});

如您所见,我正在传递数据表和变量。如果我删除变量并硬编码该变量的值。这个测试通过。 有人可以分享一些关于这里可能出现问题的信息吗?

2 个答案:

答案 0 :(得分:0)

我尝试了你想要通过这一步实现的目标(步骤可能听起来很愚蠢,这只是一个测试):

Then I should see these in Missing required fields popup "test"
            | fieldName    |
            | Category     |

自动生成的步骤定义是:

Then(/^I should see "([^"]*)" these in Missing required fields popup$/, function(arg1, callback) {
  // Write code here that turns the phrase above into concrete actions
  callback(null, 'pending');
});

似乎无法同时传递参数和表。相反,您可以使用表中的值将stdNumber传递给getCellInfo函数:

    Then(/^the student info for student "([^"]*)" should be correct in the fund list page$/, function (table, studNumber) {
      table.rows().forEach(row => {
          return this.pages.prd2Page.getCellInfo(row[2]).then((actualTexts) => {
            return assert.deepEqual(row.toString(), actualTexts.toString());
            //return console.log(actualTexts.toString());
            });
          });

      });
    }

黄瓜help也解释了替代用法。

注意:我的例子是在typescript中

答案 1 :(得分:0)

您需要指定要传递到步骤定义中的所有变量。

此外,您还需要考虑参数的顺序。该表在最后传递。

示例:

Then I order from "Dominos" a pizza for 4 ppl
  | Size  | Crust   |  Sauce  | Cheese     | 
  | 13.5  | Stuffed |  Tomato | Mozzarella |

在这里(按顺序):

  • 比萨地名
  • 人数
  • 数据表

定义是:

Then(/^I order from "(.*)" a pizza for (\d) ppl$/, function (pizza_place, ppl_num, table) {
  console.log('Buy from: ' + pizza_place);
  console.log('For ' + ppl_num + ' people');

  const input = table.hashes()
  console.log('Size: ' + input[0].Size);
  console.log('Crust: ' + input[0].Crust);
  console.log('Sauce: ' + input[0].Sauce);
  console.log('Cheese: ' + input[0].Cheese);
});

输出为:

Buy from: Dominos
For 4 people
Size: 13.5
Crust: Stuffed
Sauce: Tomato
Cheese: Mozzarella