黄瓜表:改变

时间:2015-03-25 17:05:57

标签: ruby cucumber

我要做的是迭代列列表,针对该列运行函数,保存结果,使用.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

1 个答案:

答案 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