Обобщающие тесты огурца / капибары - PullRequest
2 голосов
/ 23 февраля 2012

Я написал функцию для проверки конфигурации моего веб-приложения по умолчанию с использованием 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

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

Такое ощущение, что я либо делаю это неправильно, либо я использую неправильный инструмент. Как правильно это сделать?

Ответы [ 2 ]

0 голосов
/ 08 апреля 2012

В блоге есть сообщение об использовании переменных экземпляра в определениях шагов на http://www.cloudspace.com/blog/2010/06/23/using-instance-variables-with-cucumber-steps/.

. Комментаторы рассказывают о сопутствующей связи и, по крайней мере, об одном возможном пути ее обхода.

В частности, davetron5000 говорит:

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

0 голосов
/ 06 марта 2012

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

...