То, что вы делаете, это большой антипаттерн при написании тестов с 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/