当前位置: 首页 > 面试题库 >

如何在Rails功能测试中发送原始发布数据?

王骏
2023-03-14
问题内容

我希望将原始的发布数据(例如,未参数化的JSON)发送到我的一个控制器进行测试:

class LegacyOrderUpdateControllerTest < ActionController::TestCase
  test "sending json" do
    post :index, '{"foo":"bar", "bool":true}'
  end
end

但这给我一个NoMethodError: undefined methodsymbolize_keys’ for

用什么发送原始帖子数据的正确方法是什么ActionController::TestCase

这是一些控制器代码:

def index
  post_data = request.body.read
  req = JSON.parse(post_data)
end

问题答案:

我今天遇到了同一问题,找到了解决方案。

在您test_helper.rb的内部定义以下方法ActiveSupport::TestCase

def raw_post(action, params, body)
  @request.env['RAW_POST_DATA'] = body
  response = post(action, params)
  @request.env.delete('RAW_POST_DATA')
  response
end

在功能测试中,与post方法一样使用它,但将原始文章正文作为第三个参数传递。

class LegacyOrderUpdateControllerTest < ActionController::TestCase
  test "sending json" do
    raw_post :index, {}, {:foo => "bar", :bool => true}.to_json
  end
end

我在Rails 2.3.4上使用读取原始文章正文时对此进行了测试

request.raw_post

代替

request.body.read

如果您查看源代码,您会发现它raw_post只是在env哈希中加上了对它request.body.read的检查。RAW_POST_DATA``request



 类似资料:
  • 问题内容: 为了确保我的应用程序不容易受到此漏洞的攻击,我试图在RSpec中创建一个控制器测试来对其进行介绍。为了做到这一点,我需要能够发布原始的JSON,但是我似乎还没有找到实现此目的的方法。在进行一些研究时,我确定至少曾经有一种使用标头的方法,但这似乎不再起作用: 当我查看params哈希值时,完全没有设置令牌,而只包含。在所有情况下,尝试使用XML或什至仅使用常规发布数据时,我都得到相同的结

  • Google Apps Script支持将事件传递给触发函数的触发器。不幸的是,开发环境将允许您在没有参数传递的情况下测试函数,因此您无法以这种方式模拟事件。如果您尝试,您会得到一个错误,如: 未定义e。 或者 TypeError:无法读取属性*从未定义 (其中未定义) 人们可以将事件视为可选参数,并使用JavaScript中是否有更好的方法来执行可选函数参数的任何技术将默认值插入触发器函数。但这

  • 问题内容: 我正在尝试获取Java中的发布数据。好像应该做的最简单的事情之一?我的意思是,HttpServletRequest.getParameter必须正确执行吗?那么,如何获取原始帖子数据? 我发现HttpServletRequest获得JSONPOST数据,并使用Kdeveloper的代码从请求中提取发布数据。它有效,但是有一个陷阱:我只能 一次 获取该发布数据。 这是我根据Kdevelo

  • 问题内容: 我是Rails和Web开发的新手。 我正在Matlab中生成一堆对象,我想将这些对象发送到我的Rails应用程序中的数据库中。谁能建议我该怎么做? 到目前为止,在Rails端,我已经为数据生成了基本的支架。我可以使用“ / myobjects / new”中的表单将对象添加到数据库中。 在Matlab端,我一直在尝试使用HTTP POST请求添加对象,如下所示: 这将失败,并将以下内容

  • 我正试图通过改造发布原始数据。 我发现了许多解决方案,以POST JSON在身体使用齐射,但我发送的数据不是JSON。 当我从邮递员那里打电话时,我得到的是数据,但不是Android系统。 请告诉我怎么做。 我试图以字符串形式发送,但错误代码为500 我也在JsonObject中发送数据,但不工作... 这是我的密码。。

  • 查看:app/views/home/index.html.erb 路线: