黄瓜table:变化中
Cucumber table: changing
我想做的是遍历列列表,运行 针对该列的函数,保存结果,使用 .diff 将预期结果与实际结果进行比较。那样我猜 table 绿色和红色取决于测试的完成方式。
所以我有一个 table 如下所示:
| COLUMN_NAME | result |
| RecordNum | pass |
| MasterCompanyTicker | pass |
针对每个列名称执行 sql 脚本,根据结果返回 'pass' 或 'fail'。函数如下:
Then(/^these columns are expected to be not null$/) do |columns|
# expected is an instance of Cucumber::Ast::Table
WorkTable.logger.info title_line('Columns cannot be null')
sql = File.readlines(File.join(ENV['ms_home'],'db','scripts','test','pass_or_fail_template.sql'))
sql = (sql.map {|l| l.strip}).join(' ')
results = columns.clone
results.hashes.each {|row|
st = sprintf(sql,"#{WorkTable.table_name}","#{WorkTable.table_name}.#{row['COLUMN_NAME']}")
row['result'] = WorkTable.connection.select_all(st.encode('utf-8')).first['result']
}
columns.diff!(results,surplus_row: false)
end
sql 脚本 运行 正确;有一个 returns 字符串 'fail'。所以我期望行 ['result'] 为 'fail'。如果我在分配后立即执行 pp,我确实会看到那行 ['result'] == 'fail'。
{"COLUMN_NAME"=>"TermDate", "result"=>"fail"}
但是,如果我在 "results.hashes" 块之后对整个 table 做 "pp results",它就不是 'fail'。它是它的原始值,'pass'。
| TermDate | pass |
我做错了什么?我认为这是一种巧妙地收集所有结果的方法,并使用 table.diff 对它们进行比较。我看过其他类似的帖子并尝试遵循建议,但它对我不起作用。
感谢您的时间和考虑,
dvn
天哪,我很抱歉。我发布问题后得到了解决方案(主题行被截断了。)解决方案如下:
results = []
columns.hashes.each {|row|
st = sprintf(sql,"#{WorkTable.table_name}","#{WorkTable.table_name}.#{row['COLUMN_NAME']}")
results << {
'COLUMN_NAME' => row['COLUMN_NAME'],
'result' => WorkTable.connection.select_all(st.encode('utf-8')).first['result']
}
}
columns.diff!(results,surplus_row: false)
我试图区分一个 table 和另一个 table。那不是正确的做法。我需要将 table 与哈希数组进行比较。当我正确地这样做时,我得到以下输出:
| ActiveDate | pass |
| TermDate | pass | <<
| TermDate | fail | <<
| create_user | pass |
| create_dt | pass |
这就是我要找的。
抱歉打扰。希望这对其他人有帮助。
dvn
我想做的是遍历列列表,运行 针对该列的函数,保存结果,使用 .diff 将预期结果与实际结果进行比较。那样我猜 table 绿色和红色取决于测试的完成方式。
所以我有一个 table 如下所示:
| COLUMN_NAME | result |
| RecordNum | pass |
| MasterCompanyTicker | pass |
针对每个列名称执行 sql 脚本,根据结果返回 'pass' 或 'fail'。函数如下:
Then(/^these columns are expected to be not null$/) do |columns|
# expected is an instance of Cucumber::Ast::Table
WorkTable.logger.info title_line('Columns cannot be null')
sql = File.readlines(File.join(ENV['ms_home'],'db','scripts','test','pass_or_fail_template.sql'))
sql = (sql.map {|l| l.strip}).join(' ')
results = columns.clone
results.hashes.each {|row|
st = sprintf(sql,"#{WorkTable.table_name}","#{WorkTable.table_name}.#{row['COLUMN_NAME']}")
row['result'] = WorkTable.connection.select_all(st.encode('utf-8')).first['result']
}
columns.diff!(results,surplus_row: false)
end
sql 脚本 运行 正确;有一个 returns 字符串 'fail'。所以我期望行 ['result'] 为 'fail'。如果我在分配后立即执行 pp,我确实会看到那行 ['result'] == 'fail'。
{"COLUMN_NAME"=>"TermDate", "result"=>"fail"}
但是,如果我在 "results.hashes" 块之后对整个 table 做 "pp results",它就不是 'fail'。它是它的原始值,'pass'。
| TermDate | pass |
我做错了什么?我认为这是一种巧妙地收集所有结果的方法,并使用 table.diff 对它们进行比较。我看过其他类似的帖子并尝试遵循建议,但它对我不起作用。
感谢您的时间和考虑, dvn
天哪,我很抱歉。我发布问题后得到了解决方案(主题行被截断了。)解决方案如下:
results = []
columns.hashes.each {|row|
st = sprintf(sql,"#{WorkTable.table_name}","#{WorkTable.table_name}.#{row['COLUMN_NAME']}")
results << {
'COLUMN_NAME' => row['COLUMN_NAME'],
'result' => WorkTable.connection.select_all(st.encode('utf-8')).first['result']
}
}
columns.diff!(results,surplus_row: false)
我试图区分一个 table 和另一个 table。那不是正确的做法。我需要将 table 与哈希数组进行比较。当我正确地这样做时,我得到以下输出:
| ActiveDate | pass |
| TermDate | pass | <<
| TermDate | fail | <<
| create_user | pass |
| create_dt | pass |
这就是我要找的。
抱歉打扰。希望这对其他人有帮助。 dvn