Я обнаружил довольно странное поведение, которое сам не могу объяснить.Похоже, если вы используете Cucumber и Constants одновременно, Ruby сохранит локальные переменные между сценариями.В файле Cucumber test.feature у меня есть такие шаги
Feature: Test
Scenario Outline: Test outline
Given Set data
|user_id |hash |
|<user_id>|<hash>|
Examples:
|user_id|hash|
|king |xfgh|
Scenario Outline: What is going on
Given Set data
|shop_id|
|<shop_id>|
Examples:
|shop_id|
|554 |
Чем у меня есть файл steps.rb, например:
Given(/^Set data$/) do |table|
# table is a table.hashes.keys # => [:smth]
temp = Constants::Cons.dup
table.hashes[0].each do |key, values|
temp[:bodyData][eval(":#{key}")] = values
end
puts("temp: #{temp}")
end
файл cmodule.rb:
module Constants
Cons =
{
:toService => "Microcontrol",
:bodyData=>{}
}
end
И файл env.rb:
require_relative 'cmodule'
World(Constants)
Итак, чем я запускаю файл test.feature, мой вывод выглядит так:
temp: {:toService=>"Microcontrol", :bodyData=>{:user_id=>"king", :hash=>"xfgh"}}
temp: {:toService=>"Microcontrol", :bodyData=>{:user_id=>"king", :hash=>"xfgh", :shop_id=>"554"}}
Итак, вопрос в том, почемумой второй набросок сценария дает вывод примерно так:
temp: {:toService=>"Microcontrol", :bodyData=>{:user_id=>"king", :hash=>"xfgh", :shop_id=>"554"}}
А не так (это то, что я ожидал от сценария вначале):
temp: {:toService=>"Microcontrol", :bodyData=>{:shop_id=>"554"}}
Но есть еще кое-что,Я начал эксперимент и изменил свой cmodule.rb на:
module Constants
def self.cons
{
:toService => "Microcontrol",
:bodyData=>{}
}
end
end
Также изменил steps.rb:
Given(/^Set data$/) do |table|
# table is a table.hashes.keys # => [:smth]
temp = Constants.cons.dup
table.hashes[0].each do |key, values|
temp[:bodyData][eval(":#{key}")] = values
end
puts("temp: #{temp}")
end
После запуска test.feature у меня есть:
temp: {:toService=>"Microcontrol", :bodyData=>{:user_id=>"king", :hash=>"xfgh"}}
temp: {:toService=>"Microcontrol", :bodyData=>{:shop_id=>"554"}}
Итак, я не могу понять, почему он работает с def и не работает с константами?