我目前正在为一个原本没有测试的控制器编写测试。我想要测试的是当某人无权编辑某物时发生的重定向和某人有权编辑时的情况。
这个控制器动作是编辑(edit)。
def edit
if !@scorecard.reviewed? || 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
当试图编辑已审核的得分时,普通用户会被重定向回去,但管理员则不会。
但在运行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)
但是我从这个问题得到了这个想法,听起来可能很有用,因为它指定了重定向到的URL。
有人有这样的工作测试吗?