我需要测试两件事:
我正在使用Capybara进行验收测试,但是无法处理#2。我可以测试重定向是否发生,但它是静默发生的,所以我看不出它是301。
控制器测试无法处理#1。 rspec为控制器测试提供的“get”,“post”等谓词只允许您传入操作,而不是特定路径,并且重定向是基于路径在单个操作中实现的,如下所示:
# controller
class ExampleController
def redirect301
redirect_to case request.path
when '/old_a'
'/new_a'
when '/old_b'
'/new_b'
end, :status => 301
end
end
# routes.rb
['old_a', 'old_b'].each do |p|
map.connect p, :controller => :example, :action => :redirect301
end
那么,我该怎么办?
答案 0 :(得分:4)
试试这个:
it "should redirect with 301" do
get :action
response.code.should == 301
end
答案 1 :(得分:0)
要测试响应状态,请执行此操作 - expect(response.status).to eq(301)
并测试响应网址 - expect(response.location).to eq(my_path)
所以它应该看起来像这样:
it "should redirect with a 301 status code to my_path" do
get :action
expect(response.status).to eq(301)
expect(response.location).to eq(my_path)
end
答案 2 :(得分:0)
使用rspec-rails 2.12.0和现代expect
语法,这是正确的格式:
it "should redirect with a 301 status code to /whatever_path" do
get :some_action
expect(response).to redirect_to '/whatever_path' # or a path helper
expect(response.code).to eq '301'
end
注意字符串301 - 当我使用整数运行此规范时,它失败了,将301与Ruby中的“301”进行比较,而Ruby中的不相等。