Ruby on rails 如何在功能测试中发布原始XML?
假设我有一个REST服务,它通过POST处理XML:Ruby on rails 如何在功能测试中发布原始XML?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,假设我有一个REST服务,它通过POST处理XML: class DepartmentsController < ApplicationController # POST /departments/1/employees.xml def create params[:employees].each do |e| # <employees type="array"> @employee = Employee.new(e) @employe
class DepartmentsController < ApplicationController
# POST /departments/1/employees.xml
def create
params[:employees].each do |e| # <employees type="array">
@employee = Employee.new(e)
@employee.save
end
respond_to do |format|
format.any { head status }
end
end
end
我得到的错误是:
NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of Array.
“params”变量似乎缺少post数据:
{"department_id"=>234, "controller"=>"employees", "action"=>"create"}
我已经检查了“xml_out”的内容,它确实包含格式正确的xml。我做错了什么
感谢您的帮助:)尝试将代码更改为:
post :create, :department_id => 234, :employees => Hash.from_xml(xml_out)
编辑
根据评论,最终解决方案是:
post :create, :department_id => 234, :employees => Hash.from_xml(xml_out)["employees"]
尝试将代码更改为:
post :create, :department_id => 234, :employees => Hash.from_xml(xml_out)
编辑
根据评论,最终解决方案是:
post :create, :department_id => 234, :employees => Hash.from_xml(xml_out)["employees"]
如果我这样做,原始XML只是作为参数传递(没有自动哈希)。在这种情况下,我需要自己在控制器中完成。刚刚编辑了我的答案,使用Hash.from_xml。我认为rails会在请求中包含xml的参数时自动为您执行此操作。我认为它是有效的,但实际上以这种方式散列xml并将其作为'employees'参数发送会导致动作控制器端的{“employees”=>{“employees”=>[{…,而我只希望是{“employees”=>[{”…哦,试试post:create,:department\u id=>234,Hash.from\u xml(xml\u out)或post:create,:department\u id=>234,:employees=>Hash.from\u xml(xml\u out)[“employees”]如果我这样做,原始xml只是作为参数传递(没有自动哈希)。在这种情况下,我需要自己在控制器中进行操作。刚刚编辑了我的答案,使用Hash.from_xml。我认为rails会在请求中包含xml的参数时自动为您执行此操作。我认为这是可行的,但实际上这样对xml进行哈希并将其作为'employees'参数发送会导致{“employees”=>{“employees”=>[{“…在action controller方面,我只希望{“employees”=>[{”…哦,试试post:create,:department\u id=>234,Hash.from\u xml(xml\u out)或post:create,:department\u id=>234,:employees=>Hash.from\u xml(xml\u out)[“employees”]