我要做的是迭代列列表,针对该列运行函数,保存结果,使用.diff将预期结果与实际结果进行比较。这样我觉得一张漂亮的绿色和红色表取决于测试的完成情况。
所以我有一个如下所示的表:
| 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脚本正常运行;有一个返回字符串'fail'。所以我期待row ['result']'失败'。如果我在分配后立即执行pp,我确实看到行['result'] =='失败'。
{"COLUMN_NAME"=>"TermDate", "result"=>"fail"}
但是,如果我在“results.hashes”块之后对整个表执行“pp结果”,则不会“失败”。这是它的原始值'pass'。
| TermDate | pass |
我做错了什么?我认为这是一种巧妙的方式来收集所有结果,使用table.diff进行比较。我已经看到了这些方面的其他帖子,并尝试遵循建议,但它对我不起作用。
感谢您的时间和考虑, DVN
答案 0 :(得分:0)
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)
我试图将一张桌子与另一张桌子区分开来。这不是正确的事情。我需要针对散列数组来区分表。当我正确地执行此操作时,我得到以下输出:
| ActiveDate | pass |
| TermDate | pass | <<
| TermDate | fail | <<
| create_user | pass |
| create_dt | pass |
这就是我要找的东西。
抱歉打扰。希望这有助于其他人。 DVN