Я написал функцию для проверки конфигурации моего веб-приложения по умолчанию с использованием Cucumber и 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"
Отлично сработало. Я хочу, чтобы пользователи, которые установили и настроили веб-приложение на своих серверах, могли запустить тест, чтобы подтвердить правильность их конфигурации. И «Устройство» - это строка в файле конфигурации по умолчанию, которую пользователь может изменить. Это элемент в массиве, и их можно добавлять или удалять из массива при настройке своего экземпляра приложения.
Это разумное использование инструментов, или я злоупотребляю огурцом и / или капибарой? Если это разумно, как бы я это сделал? Если это плохая идея, какие инструменты я мог бы использовать вместо этого, если что-нибудь?
Вот как я заставил это работать. Я просто не уверен, что это лучший способ сделать это.
Чтобы это работало, функция должна выглядеть примерно так:
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
Но я не чувствую себя хорошо по этому поводу. Если ничего другого, я предполагаю, что может быть конфликт имен с другой переменной экземпляра, определенной вне определения шага.
Такое ощущение, что я либо делаю это неправильно, либо я использую неправильный инструмент. Как правильно это сделать?