#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_ — если это решило вашу проблему — вы можете принять ее.