Как сделать ценность с одного шага доступным для других шагов в огурцах

В моих сценариях первый или два набора данных, которые мне нужно использовать в других шагах. Шаги выглядят примерно так:

Given I add 5 apples
And I add 3 bananas

Мне нужно сохранить тип и количество фруктов для каждого, чтобы я мог проверить несколько вещей, таких как оценка, промежуточный итог, общий итог и т.д. На последующих этапах. Первоначально я использовал переменные экземпляра, поскольку сценарии были простыми. Они включали только один тип и количество фруктов. Однако, поскольку сценарии включают больше типов и количества фруктов, мне нужно выяснить, как сохранить это, чтобы сделать это доступным для последующих шагов. Мой шаг, когда мы использовали только один фрукт и количество в каждом сценарии:

Given(/^I add (\d+) "([^\"]*)"$/) do |quantity, type|
 @fruit = {}
 @fruit = [type => quantity]
 #rest of code here
end

Каков наилучший способ изменить это, чтобы он продолжал работать?

1 ответ

Вы можете сделать @fruit хешем, где ключи являются типами фруктов, а значения - количеством каждого плода. Например,

@fruit = {:apples => 5, :bananas => 3}

Будет представлять 5 яблок и 3 банана.

Вы можете легко сделать это с помощью шага огурца. Обратите внимание, что я для ясности переименовал @fruit в @basket.

Given(/^I add (\d+) "([^\"]*)"$/) do |quantity, type|
 @basket ||= {}
 @basket[type] = quantity
 #rest of code here
end

Если вы хотите сделать что-то, где добавляется больше одного и того же типа фруктов, например:

Given I add 5 apples
And I add 3 apples

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

Given(/^I add (\d+) "([^\"]*)"$/) do |quantity, type|
 add_fruit = {type => quantity}
 @basket ||= {}
 @basket = @basket.merge(add_fruit){ |key, oldval, newval| oldval + newval }
 #rest of code here
end

Разумеется, ваш другой код должен быть скорректирован для учета хеша, содержащего несколько типов фруктов.

licensed under cc by-sa 3.0 with attribution.