Ruby 黄瓜桌:换

Ruby 黄瓜桌:换,ruby,cucumber,Ruby,Cucumber,我试图做的是迭代列列表,对该列运行函数,保存结果,使用.diff将预期结果与实际结果进行比较。这样的话,根据测试完成的方式,我猜一个漂亮的绿色和红色表格 因此,我有一个如下所示的表: | COLUMN_NAME | result | | RecordNum | pass | | MasterCompanyTicker | pass | 对每个列名执行sql脚本,根据结果返回“通过”或“失败”

我试图做的是迭代列列表,对该列运行函数,保存结果,使用.diff将预期结果与实际结果进行比较。这样的话,根据测试完成的方式,我猜一个漂亮的绿色和红色表格

因此,我有一个如下所示的表:

  |     COLUMN_NAME         |     result |
  |     RecordNum           |     pass   |
  |     MasterCompanyTicker |     pass   |
对每个列名执行sql脚本,根据结果返回“通过”或“失败”。功能如下:

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
  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)
sql脚本正在正确运行;有一个返回字符串“fail”。所以我希望第['result']行是'fail'。如果我在赋值后立即执行pp,我确实会看到该行['result']='fail'

{"COLUMN_NAME"=>"TermDate", "result"=>"fail"}
但是,如果在results.hashes块之后对整个表执行pp结果,则不是“fail”。它是它的原始值“pass”

|     TermDate            |     pass   |
我做错了什么?我认为这是一种巧妙的方法,可以收集《OnSwoop》中的所有结果,并使用table.diff进行比较。我看过其他类似的帖子,也试着遵循这些建议,但对我来说不起作用

感谢您的时间和关心,
天啊,我很抱歉。在我发布了带有截断主题行的问题后,我有了解决方案。解决办法如下:

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