Платформа тестирования Rails 2.3.9 - встроенная среда тестирования rspec1, cucumber или rails - PullRequest
0 голосов
/ 24 июня 2011

Теперь у нас есть приложение рельсов значительного размера (2.3.9) с тестовыми наборами 0 рельсов.(Какие???).Да.Это возможно:).

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

Q1: Некоторые вопросы y2009 SO рекомендуют использовать rspecдля модульного тестирования моделей / контроллеров и огурцов для тестирования представлений.Это (по состоянию на 23 июня 2011 г.) по-прежнему действительная рекомендация?

Q2: Кто-нибудь сумел собрать все необходимые тестовые случаи на одной платформе (скажем, просто Cucumber)? Если да, то какаяодин?

Ответы [ 2 ]

2 голосов
/ 24 июня 2011

Q1: Это зависит от ваших разработчиков.По сути, вы можете тестировать почти одинаковые вещи со всеми фреймворками.Я бы лично пошел с rspec1.Вы найдете много ресурсов для rspec, особенно для rails 2.3.x.В долгосрочной перспективе я попытался бы перенести проект на рельсы 3. Чем дольше вы ждете, тем более болезненным становится.

Q2: Нет, огурец AFAIK используется для интеграционного тестирования.Вы можете просто использовать rspec или testunit, но тогда вам не хватит интеграционного тестирования.Если вы пойдете только на интеграционное тестирование, вам не хватит модульного тестирования, но вам нужны модульные (или поведенческие) тесты.Кроме того, вы должны потратить некоторое время на насмешливые фреймворки, так как они сэкономят вам много времени.

1 голос
/ 24 июня 2011

Это скорее вопрос предпочтения, но из трех я бы выбрал rspec или Test :: Unit. В последнее время RSpec подвергали критике за чрезмерную разработку, но мне действительно нравится:

  • синтаксис сопоставителя (value.should == 1 против assert_equal(value, 1))
  • имена тестов не ограничиваются именами методов (it "does something awesome" { ... } против def test_it_does_something_awesome; ...; end)

Вы можете достичь того и другого с помощью TestUnit с некоторыми вспомогательными библиотеками относительно легко ... но я просто предпочитаю использовать RSpec.

Когда вы пишете код и тестируете, обычно (всегда?) Лучше начинать извне в: IE, писать интеграционный тест (вошедший в систему пользователь нажимает кнопку, чтобы добавить товар в корзину за 5,00 долл., Затем проверяет и Платит с его кредитной карты $ 5,00). Таким образом, вместо того, чтобы тестировать поведение определенного класса (как вы делаете с модульными тестами), вам нужно будет создавать объекты в базе данных и делать вызовы get / post / etc., которые взаимодействуют с сайтом так же, как пользовательский веб-браузер. сделает ваш тест пронизывающим весь стек.

В последнее время мне нравилось использовать Steak внутри RSpec для моих интеграционных тестов (с использованием Capybara для облегчения веб-взаимодействия)

Как только вы построите свой внешний периметр, я бы порекомендовал вам сосредоточиться на модульных тестах.

Модульные тесты могут быть фантастическими для документирования поведения класса. Я группирую их по методам и описываю, что можно передать в метод и что я ожидаю получить.

describe Object do
  describe "#method" do
    it "returns 4 when passed 2" do
      ...
    end
   end
end
...