Rspectestingredirect_to:回来
你如何testingredirect_to :back
rspec?
我明白了
ActionController::RedirectBackError
:
在这个动作的请求中没有设置HTTP_REFERER
,所以redirect_to :back
无法成功调用。 如果这是一个testing,请确保指定request.env["HTTP_REFERER"]
。
如何在我的testing中设置HTTP_REFERER
?
使用RSpec,你可以在一个before
块中设置referer。 当我试图直接在testing中设置引用者时,无论我把它放在哪里,似乎都不起作用,但是之前的块做到这一点。
describe BackController < ApplicationController do before(:each) do request.env["HTTP_REFERER"] = "where_i_came_from" end describe "GET /goback" do it "redirects back to the referring page" do get 'goback' response.should redirect_to "where_i_came_from" end end end
当请求带有新的请求样式的请求时,从rails guide :
describe BackController < ApplicationController do describe "GET /goback" do it "redirects back to the referring page" do get :show, params: { id: 12 }, headers: { "HTTP_REFERER" => "http://example.com/home" } expect(response).to redirect_to("http://example.com/home") end end end
关于testing:集成testing中的反向链接,我首先访问一个deadend页面,我认为它不可能被用作链接,然后是我正在testing的页面。 所以我的代码看起来像这样
before(:each) do visit deadend_path visit testpage_path end it "testpage Page should have a Back button going :back" do response.should have_selector("a",:href => deadend_path, :content => "Back") end
但是,这确实有缺陷,如果链接真的到了deadend_path,那么testing将不正确地通过。
恕我直言,接受的答案是有点哈克。 更好的select是将HTTP_REFERER
设置为应用程序中的实际url,然后期望redirect:
describe BackController, type: :controller do before(:each) do request.env['HTTP_REFERER'] = root_url end it 'redirects back' do get :whatever response.should redirect_to :back end end
- redirect到一个随机的string常量感觉,如果它意外工作
- 您可以利用rspec的内置function来精确expression您想要的内容
- 你不会引入和重复魔术string值
对于更新版本的rspec,您可以使用期望代替:
expect(response).to redirect_to :back
如果有人绊倒了这一点,他们正在使用request
规格,你需要明确地设置你的请求头。 testing请求的格式取决于您使用的是哪个版本的RSpec,以及是否可以使用关键字参数而不是位置参数。
let(:headers){ { "HTTP_REFERER" => "/widgets" } } it "redirects back to widgets" do post "/widgets", params: {}, headers: headers # keyword (better) post "/widgets", {}, headers # positional expect(response).to redirect_to(widgets_path) end
https://relishapp.com/rspec/rspec-rails/docs/request-specs/request-spec
request.env['HTTP_REFERER'] = '/your_referring_url'
- 使用.htaccess将HTTPredirect到HTTP
- Spring Security在成功login后redirect到上一页
- login后redirect到上一页 PHP
- 如何使一个buttonredirect到另一个页面使用jQuery或只是Javascript
- Javascriptredirect与谷歌分析
- RequestDispatcher.forward()vs HttpServletResponse.sendRedirect()
- Python如何简单地将打印输出redirect到TXT文件,并为每个redirect创build一个新行
- 从ASP.NET MVC控制器redirect到外部URI
- HTTP / 1.1 302究竟是什么意思?