Я написал функцию, чтобы проверить конфигурацию моего веб-приложения по умолчанию, используя Cucumber и Capybara. Часть функции выглядела так:Обобщая тесты огурца/Capybara
And the page has a photo labeled "Device"
And the page has a checkbox labeled "Device"
And I check "Device"
And I submit the form
Then the resulting page has no photo labeled "Device"
Это сработало отлично. Я хочу, чтобы пользователи, которые установили и настроили веб-приложение на своих серверах, смогли запустить тест, чтобы подтвердить правильность их конфигурации. И «Устройство» - это строка в файле конфигурации по умолчанию, которую пользователь может изменить. Это элемент в массиве, и они могут добавлять или удалять из массива при настройке своего экземпляра приложения.
Является ли это разумным использованием инструментов или я злоупотребляю огурцом и/или Capybara? Если это разумно, как бы я это сделал? Если это плохая идея, какие инструменты я могу использовать для этого вместо этого?
Вот как я получил его на работу. Я просто не уверен, что это лучший способ сделать это.
Для этого, чтобы работать, функция бы выглядеть следующим образом:
And the page has at least 3 photos, let us call the last one "third_photo"
на соответствующем этапе определения, я использую XPath вытащить соответствующую строку метки для первой фотографии и назначить его к объекту Hash, хранящемуся в переменной класса.
And /^I the page has at least (\d*) photos, let us call the last one "([^\"]*)"$/ do |n, name|
if ! defined?(@note)
@note = Hash.new;
end
@note[name] = find(:xpath, '//ol[@id="menu"]/li[' +n+ ']/a').text;
end
Последующие определения шагов теперь могут получить доступ к значению независимо от того, что было.
Таким образом, еще одна особенность может быть:
Then I uncheck "third_item"
И соответствующее определение шага может быть:
Then /I uncheck "([^\"]*)"/ do |item|
uncheck(@note[item])
end
Но я не чувствую себя хорошо об этом. Если ничего другого, я полагаю, что может быть столкновение имен с другой переменной экземпляра, определенной за пределами определений шагов.
Похоже, я либо делаю это неправильно, либо я использую неправильный инструмент. Каков правильный способ сделать это?
Та часть, я не чувствую себя хорошо о том, использование переменной класса, чтобы передавать значения от одного шага к другому. Похоже, я нарушаю инкапсуляцию. Но, насколько я знаю, это действительно рекомендуемый подход. – Trott