数据表
当步骤包含 数据表 时,数据表作为对象传递给步骤定义函数。需要注意的是,数据表与场景大纲中的示例表不同。数据表有多种读取方式,具体区分为是否包含列标题信息。我们可以通过以下方法访问数据表:
包含列标题信息的方法
hashes()
: 将每一行转换为一个对象,列标题作为键,内容作为值,最终返回对象数组。raw()
: 直接以二维数组形式返回表格的内容,包含标题行。
不包含列标题信息的方法
rowsHash()
: 将表格转换为一个对象,第一列作为键,第二列作为值。此方法适用于只有两列的数据表。rows()
: 返回二维数组,每一行作为一个一维数组,但不包括标题行。
示例
以下是一个包含数据表的 Feature 文件,展示了如何在步骤中使用数据表:
# language: zh-CN
功能: 用户登录验证
场景: 使用数据表验证用户登录
假如 我有以下用户信息
| id | password |
| user01 | 123456 |
| user02 | 123456 |
| user03 | 123456 |
那么 我应该能够输出表格的不同读取方式
为了处理上述 Feature 文件中的步骤,我们需要在步骤定义中实现读取数据表的逻辑。在步骤定义函数中,数据表被传入为参数 table
,我们可以使用不同的方法读取数据表。以下代码展示了如何读取数据表并输出结果:
JavaScript
const { Given, Then } = require('cucumber');
Given('我有以下用户信息', async function (table) {
// 使用 table 数据表读取方法
this.table_hashes = table.hashes();
this.table_raw = table.raw();
this.table_rowsHash = table.rowsHash();
this.table_rows = table.rows();
});
Then('我应该能够输出表格的不同读取方式', async function () {
console.log("table.hashes():", this.table_hashes);
console.log("table.raw():", this.table_raw);
console.log("table.rowsHash():", this.table_rowsHash);
console.log("table.rows():", this.table_rows);
});
输出信息:
JavaScript
table.hashes(): [
{ id: 'user01', password: '123456' },
{ id: 'user02', password: '123456' },
{ id: 'user03', password: '123456' }
]
table.raw(): [
[ 'id', 'password' ],
[ 'user01', '123456' ],
[ 'user02', '123456' ],
[ 'user03', '123456' ]
]
table.rowsHash(): {
id: 'password',
user01: '123456',
user02: '123456',
user03: '123456'
}
table.rows(): [
[ 'user01', '123456' ],
[ 'user02', '123456' ],
[ 'user03', '123456' ]
]