Изменить хэш-значение Ruby из заданной таблицы Cucumber

#ruby #hash #cucumber

#ruby #хэш #cucumber

Вопрос:

Я передаю таблицу из cucumber в Ruby, пытаясь изменить значение хэша, затем я хочу передать эту таблицу на следующий шаг. Значение хэша изменяется, но таблица остается неизменной. Я делаю что-то не так или упускаю какую-то концепцию здесь. Пожалуйста, сообщите!

Мой пример Cucumber:

 Scenario:  Change Table Value
  Given I start with this table
  | person | grade |
  | Bob    | 82    |
  | Jim    | 94    |
  | Bill   | 58    |
  

Вот Ruby:

 Given /^I start with this table$/ do |table|
  puts "table is:"
  puts table
  table.hashes.each do |hash|
    puts "hash is:"
    puts hash

    puts "hash['person'] = #{hash['person']}"
    puts "assigning new name..."
    hash['person'] = 'Superman'
    puts "hash['person'] = #{hash['person']}"

    puts "hash is:"
    puts hash
  end
  puts "table is:"
  puts table
end
  

Вывод показывает, что значение хэша действительно изменено, но окончательные значения таблицы показывают, что исходная таблица не затронута.

Я хочу передать эту таблицу на следующий шаг в качестве входных данных с новым значением.

Любые советы будут оценены, спасибо, Эд

Ответ №1:

Вы можете установить преобразованную таблицу в качестве переменной экземпляра для следующего шага для чтения:

 Given /^I start with this table$/ do |table|
  @hashes = []
  table.hashes.each do |hash|
    hash['person'] = 'Superman'
    @hashes << hash
  end
end

Then /^I can read the transformed data$/ do
  @hashes.each do |hash|
    puts hash
  end
end
  

Комментарии:

1. Спасибо, Uri. Чтобы избежать использования переменной экземпляра, могу ли я передать хэш непосредственно на другой шаг, который ожидает таблицу в качестве входных данных (очень похоже на первый шаг?) (Причина в том, что у меня уже есть шаг, который ожидает таблицу, используемую другим, уже существующим, Gherkin. По сути, я хочу предварительно обработать хэш и передать его на этот уже существующий шаг.)

2. @Ed_ — насколько я знаю, нет, но вы могли бы использовать условие защиты для поддержки как с шагом предварительной обработки, так и без него ( (table.try(:hashes) || @hashes).each do |hash| …)

3. Хорошо. Спасибо за ваши ответы, Uri. Мне еще не разрешено «голосовать» за ваш ответ, иначе я бы это сделал. Еще раз спасибо. — Ред

4. @Ed_ — если это решило вашу проблему — вы можете принять ее.