我希望将原始的发布数据(例如,未参数化的JSON)发送到我的一个控制器进行测试:
class LegacyOrderUpdateControllerTest < ActionController::TestCase test "sending json" do post :index, '{"foo":"bar", "bool":true}' end end
但这给我一个NoMethodError: undefined methodsymbolize_keys’ for
NoMethodError: undefined method
用什么发送原始帖子数据的正确方法是什么ActionController::TestCase?
ActionController::TestCase
这是一些控制器代码:
def index post_data = request.body.read req = JSON.parse(post_data) end
我今天遇到了同一问题,找到了解决方案。
在您test_helper.rb的内部定义以下方法ActiveSupport::TestCase:
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方法一样使用它,但将原始文章正文作为第三个参数传递。
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
raw_post
RAW_POST_DATA``request