首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rspec测试redirect_to :返回

Rspec测试redirect_to :返回
EN

Stack Overflow用户
提问于 2011-05-18 14:00:13
回答 6查看 21.2K关注 0票数 65

如何在rspec中测试redirect_to :back

我得到了

ActionController::RedirectBackError

在对此操作的请求中未设置HTTP_REFERER,因此无法成功调用redirect_to :back。如果这是测试,请确保指定request.env["HTTP_REFERER"]

如何在测试中设置HTTP_REFERER

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-07-18 15:28:31

使用RSpec,您可以在before块中设置referer。当我尝试在测试中直接设置referer时,无论我把它放在哪里,它似乎都不起作用,但之前的代码块起到了作用。

代码语言:javascript
运行
复制
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
票数 118
EN

Stack Overflow用户

发布于 2016-10-22 02:19:56

当使用新的请求样式请求请求时,从rails guide

代码语言:javascript
运行
复制
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
票数 4
EN

Stack Overflow用户

发布于 2016-04-18 22:51:18

我觉得公认的答案有点老生常谈。一个更好的选择是将HTTP_REFERER设置为应用程序中的实际url,然后期望被重定向回来:

代码语言:javascript
运行
复制
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

  • 重定向到随机字符串常数感觉就像是意外地工作
  • 您利用rspec的内置功能准确地表达了您想要的内容
  • 您不会引入和重复神奇的字符串值

对于较新版本的rspec,您可以改用expectations:

代码语言:javascript
运行
复制
expect(response).to redirect_to :back
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6040479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档