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