Итак, я в настоящее время пишу тест для контроллера в существующем контроллере, который раньше не имел этого. то, что я хочу протестировать, - это перенаправление, которое происходит, когда кому-то не разрешается что-то редактировать, а кто-то может разрешить его редактировать.
действие контроллера, редактируемое
def edit
if [email protected]? || admin?
@company = @scorecard.company
@custom_css_include = "confirmation_page"
else
redirect_to :back
end
end
Итак, если оценочная карта была пересмотрена, тогда только администратор может отредактировать эту оценку. Маршруты для этого контроллера.
# scorecards
resources :scorecards do
member do
get 'report'
end
resources :inaccuracy_reports, :only => [:new, :create]
end
и, наконец, тест
require 'spec_helper'
describe ScorecardsController do
describe "GET edit" do
before(:each) do
@agency = Factory(:agency)
@va = Factory(:va_user, :agency => @agency)
@admin = Factory(:admin)
@company = Factory(:company)
@scorecard = Factory(:scorecard, :level => 1, :company => @company, :agency => @agency, :reviewed => true)
request.env["HTTP_REFERER"] = "/scorecard"
end
context "as a admin" do
before(:each) do
controller.stub(:current_user).and_return @admin
end
it "allows you to edit a reviewed scorecard" do
get 'edit', :id => @scorecard.id
response.status.should be(200)
end
end
context "as a va_user" do
before(:each) do
controller.stub(:current_user).and_return @va
end
it "does not allow you to edit a reviewed scorecard" do
get 'edit', :id => @scorecard.id
response.should redirect_to :back
end
end
end
end
поэтому va при попытке отредактировать пересмотренный счет будет перенаправлен обратно, где не будет администратора.
но при запуске этого через rspec я получаю
ScorecardsController
GET edit
as a admin
allows you to edit a reviewed scorecard
as a va_user
does not allow you to edit a reviewed scorecard (FAILED - 1)
Failures:
1) ScorecardsController GET edit as a va_user does not allow you to edit a reviewed scorecard
Failure/Error: response.should redirect_to :back
Expected response to be a redirect to </scorecard> but was a redirect to <http://test.host/>
# ./spec/controllers/scorecards_controller_spec.rb:33:in `block (4 levels) in <top (required)>'
Finished in 0.48517 seconds
2 examples, 1 failure
поэтому я не знаю, работает ли это с тех пор, как я установил request.env["HTTP_REFERER"] = "/scorecard"
как место, которое должно быть :back
как оно где. или я пропустил идею, все вместе глядя на httpstatus есть 300 ответов, которые я мог бы использовать, но я не знал бы, с чего начать?
любая помощь была бы удивительной
ИЗМЕНИТЬ
Я мог бы протестировать его, сделав это так
...
response.status.should be(302)
но у меня появилась идея из question, и похоже, что это может быть мощным, поскольку он указывает URL, перенаправленный на.
у любого есть рабочий тест, подобный этому