当前位置: 首页 > 知识库问答 >
问题:

在rspec rails中测试redirect_to:back

蒙胤
2023-03-14

我有一个控制器方法,它使用<code>redirect_to:back<code>将用户重定向回原始页面。方法如下所示。

def create
     @conversation = Conversation.find(params[:conversation_id])
     @message = @conversation.messages.build(message_params)
      if @message.save
         undeletion_unread
         redirect_to :back
         flash[:success] = "Message Sent Successfully"
      else
        redirect_to :back
        flash[:danger] = 'Message must be between 1-600 characters'
      end
    end

我试图为有效和无效的创建方法编写一个集成测试。下面给出了集成测试。

test "valid creation of a message" do 
      post user_conversation_messages_path(@user, @conversation), message: {body: "abc"}
      assert_equal "Message Sent Successfully", flash[:success]
  end

  test "invalid creation of a message" do 
      post user_conversation_messages_path(@user, @conversation), message: {body: "  "}
      assert_equal "Message must be 1-600 characters", flash[:success]
  end

我得到以下与redirect_to相关联的错误:back

Error:
MessageCreateTest#test_invalid_creation_of_a_message:
ActionController::RedirectBackError: No HTTP_REFERER was set in the request to this action, so redirect_to :back could not be called successfully. If this is a test, make sure to specify request.env["HTTP_REFERER"].
    app/controllers/messages_controller.rb:14:in `create'
    test/integration/message_create_test.rb:16:in `block in <class:MessageCreateTest>'

我尝试在创建方法中使用HTTP REFERRER(如下所述)而不是redirect_to:back,但我仍然收到错误。

redirect_to request.env["HTTP_REFERER"]

我不确定我需要改变什么来通过redirect_to :back的测试。我曾经遇到过这个问题,结果我改变了路线。然而,在这种情况下,使用redirect_to :back要容易得多。我在谷歌上搜索了这个问题后,尝试了不同的建议。大部分都过时了,并不真正适用。谢谢

共有1个答案

郑帅
2023-03-14

在对路由进行任何操作之前,您需要设置HTTP_REFERER,然后您将像这样< code>back返回到哪里:

test "valid creation of a message" do 
  request.env["HTTP_REFERER"] = "/posts"
  post user_conversation_messages_path(@user, @conversation), message: {body: "abc"}
  assert_equal "Message Sent Successfully", flash[:success]
end

test "invalid creation of a message" do 
  request.env["HTTP_REFERER"] = "/posts"
  post user_conversation_messages_path(@user, @conversation), message: {body: "  "}
  assert_equal "Message must be 1-600 characters", flash[:success]
end
 类似资料:
  • 我试图用Jasmine为Angularjs编写单元测试。这是我的控制器: 和测试 测试失败,即使我试图测试期望(true). toBe(true); 茉莉花,因果报应,棱角分明的嘲弄都在我的索引里。jasmine调试页面中的html,还有测试脚本。 我发现如果删除beforeach()块,expect(true)。托比(真的)通过了。 下面是一个错误:

  • 在Android Espresso测试中有什么好的方法来测试结果代码和数据吗?我在用浓缩咖啡2.0。 定义一个新方法,如并使用该方法以便可以截获,等等。 编写一个只用于测试的TestActivity,它将调用上的,并在中检查结果 试着思考这两个坏处中什么是较小的,或者是否有任何其他关于如何测试这一点的建议。有什么建议吗?谢了!

  • 问题内容: 我是Maven的新手,甚至是Clojure的新手。作为一种学习语言的练习,我正在编写蜘蛛纸牌播放器程序。 我已经配置了一个Maven目录结构,其中包含通常的src / main / clojure和src / test / clojure目录。我的pom.xml文件包含clojure-maven-plugin。当我运行“ mvn test”时,尽管我在src / test / cloj

  • 问题内容: 我在这个示例中实现了具有PriorityBlockingQueue的ThreadPoolExecutor:http://codingdict.com/questions/131378 并写了一个测试: 但是最后,我没有得到1 2 3 4 5,我得到了这些数字的随机顺序。测试是否有问题,还是其他?如果首先,如何正确测试? 问题答案: 仅当池完全繁忙并且您提交了几个新任务时才考虑优先级。如

  • 我试图使用XML和TestNG运行一个测试套件,但是我总是同时使用Eclipse和命令行得到相同的消息: 该文件已正确读取,但测试似乎没有运行。 以下是我的testng.xml的内容: 这是我的目录结构在Eclipse中的样子: 此外,这也是我试图通过命令行运行测试套件的方式: 我尝试过通过eclipse清理项目,但似乎没有帮助。我也试过跑步: < code>mvn clean,但它也没有完成工作

  • 问题内容: 我正在使用带有eclipse的junit编写功能测试。 当运行单个测试时,它将按照我在类中设置它们的顺序运行。 例如。 但是,当我将此测试作为套件的一部分运行时(在包中),顺序是随机的。 例如,它将执行验证,然后删除用户,然后删除joinuserToRoom然后创建用户。 我在套件中的测试并不相互依赖。但是,测试中的每个单独测试都取决于它们以正确的顺序运行。 有什么办法可以实现? 谢谢