Я написал этот сценарий, чтобы проверить, что, когда пользователь посещает неопубликованные записи они будут видеть страницу с ошибкой:Как проверить ошибку с огурцом?
Scenario: Unpublished entry
Given there is an unpublished entry
When a user visits the entry page
Then he will see an error page
Шаги
Given /^there is (?:an|one) unpublished entry$/ do
@entry = create(:entry, published: false)
end
When /^a user visits the entry page$/ do
visit entry_path(@entry)
end
Then(/^he will see an error page$/) do
expect(response).to raise_error(ActiveRecord::RecordNotFound)
end
При выполнении теста, он не проходит мимо второго потому что он терпит неудачу с ошибкой ActiveRecord::RecordNotFound
; это то, что я хочу, но это происходит на неправильном шаге.
When a user visits the entry page # features/step_definitions/entry_steps.rb:17
Couldn't find Entry with id=93 [WHERE "entries"."published" = 't'] (ActiveRecord::RecordNotFound)
Очевидно, что я делаю что-то неправильно. Как написать свой сценарий, чтобы лучше выразить мое намерение, которое «посещение неопубликованной записи приведет к ошибке»?
Я не согласен. Он может тестировать возможность того, что пользователь вручную вводит идентификатор записи в адресной строке. Здесь пользователь неправильно использует приложение, и разработчик не обязан защищать его от 404; он мало что может сделать, чтобы предотвратить это. Для его цели (разработчик) он хочет быть уверенным, что статья, которая не опубликована, не открывается через ручное ввод URL-адреса. – Mohamad
В этом случае он должен выдать код ошибки HTML. Веб-приложение никогда не должно подвергаться исключению из мира. Вот почему есть коды ошибок HTML! – screenmutt
Я склонен согласиться, но в этом конкретном случае, когда пользователь потенциально злонамерен, я не вижу вреда при отображении экрана ошибки обработки Rails, который выдает очень мало, кроме какой-либо ошибки.Переход на лишнюю милю, чтобы обеспечить обработку ошибок для ошибки, которая не должна происходить при нормальном использовании, кажется щедрой задачей для незаслуженного получателя. – Mohamad