Могу ли я сделать огурцы по рельсам короче? - PullRequest
0 голосов
/ 15 мая 2011

Я начинаю с огурца, и я написал следующее определение шага, которое в основном я скопировал из теста rspec, который у меня уже был.

Given /^There is a picture on the screen$/ do
  describe PagesController do
    describe "GET 'home'" do
      it "should be successful" do
        get 'home'
        response.should be_success
      end
    end
  end
end

Теперь я также довольно новичок в Rails,Но это кажется мне немного длинным, я не могу сделать его немного короче?

Ответы [ 3 ]

1 голос
/ 15 мая 2011

То, что вы делаете, это большой антипаттерн при написании тестов с Cucumber.Вы не разбили свой шаг достаточно далеко - когда вы смотрите на тест, который вы получили, вы на самом деле проходите, по крайней мере, пару различных шагов, один из которых вы не хотите тестировать.Лучшим тестом для этого будет:

Given I am on the home page
Then I should see a picture

Первый шаг, который вы получаете бесплатно при установке веб-шагов capybara, при условии, что вы используете по умолчанию помощник пути в features/support/paths.rb.Второй будет выглядеть следующим образом:

Then "I should see a picture" do 
  page.should have_selector("img.picture")
end

На этом шаге будет искать изображение с классом 'picture' на нем - мое произвольное определение того, что представляет собой картинка в контексте вашего приложения.

Обратите внимание, что я здесь не проверяю статус ответа.Идея огурца (даже более того, чем Rspec) заключается в том, что вы тестируете вещи с точки зрения клиента.Возможно, ваш клиент может быть клиентским API, поэтому, возможно, уместна проверка кода состояния, но в целом с веб-приложением вы гораздо больше беспокоитесь о пользовательском интерфейсе, и сбойный код состояния проявляется другими способами, такими каксломанный интерфейс.Такие детали, как коды состояния, как правило, являются деталями реализации, которые не следует тестировать с точки зрения BDD (хотя они должны быть учтены в ваших модульных тестах.)

FWIW, я также не согласен сУтверждение, что длина теста - это то, что должно определять, следует ли вам использовать Rspec или Cucumber.Смотрите мой блог по этому вопросу: http://collectiveidea.com/blog/archives/2011/04/15/language-matters/

1 голос
/ 16 мая 2011

Настоятельно рекомендуется не использовать Cucumber, пока вы не познакомитесь с Rails / Ruby. Огурец добавляет уровень абстракции, который может сделать вещи очень запутанными, разочаровывающими и отнимающими много времени. Просто получите очень хорошо с RSpec в первую очередь. Затем, когда вы хотите провести интеграционные тесты в своем приложении Rails, используйте Capybara с RSpec. Если вам удобно использовать эти драгоценные камни, вы можете отправиться в Огурец.

Огурец о написании пользовательских историй. Затем вы переводите эти шаги огурца в строки RSpec и Capybara.

0 голосов
/ 15 мая 2011

Если вы ищете краткость, я бы рекомендовал придерживаться RSpec.Основным преимуществом Cucumber является его читаемость для людей, которые не пишут код, а RSpec жертвует этим, чтобы быть короче.Я попытался использовать Lettuce , аналог Python для Cucumber, в одном из моих проектов и обнаружил, что слишком много работы, чтобы не отставать.чтобы написать более короткие тесты, используйте RSpec.Если вы хотите, чтобы ваш разработчик редактировал ваши тесты или вы работаете в команде, используйте Cucumber.

...