我正在为Rails Tutorial示例应用添加RESTful API。控制器操作应将XML作为输入并使用XML进行响应。我试图遵循TDD方法,但一直无法找到一个确定的发布请求的方法。以下是我的测试,就像我到目前为止所写的那样:
it "should increment the Relationship count" do
expect do
# valid_xml = "<xml><:followed_id>#{other_user.id}</:followed_id></xml>"
valid_xml = { followed_id: other_user.id }.to_xml
post :create, relationship: valid_xml, format: 'xml', content_type: 'application/xml'
end.to change(Relationship, :count).by(1)
end
it "should respond with success" do
# valid_xml = "<xml><:followed_id>#{other_user.id}</:followed_id></xml>"
valid_xml = { followed_id: other_user.id }.to_xml
post :create, relationship: valid_xml, format: :xml, content_type: 'application/xml'
expect(response).to be_success
end
此特定测试验证发布XML将创建新关系。如您所见,我尝试了几种方法来指定输入是XML。这是控制器动作:
class RelationshipsController < ApplicationController
before_action :signed_in_user
respond_to :html, :js, :xml
def create
# Problem is that the xml is not being read as such; it's a string
relationship = params[:relationship]
puts relationship
puts relationship[:followed_id]
@user = User.find(relationship[:followed_id])
current_user.follow!(@user)
respond_with @user
end
对于给定的测试,控制器将relationship
打印为XML,但在下一行打印错误,它会尝试获取键:followed_id
的值。两个测试的错误均为TypeError: no implicit conversion of Symbol into Integer
。
我认为这意味着relationship
的类型是字符串,而不是散列,Ruby认为括号应该是索引。有人在测试或控制器动作中知道我哪里出错吗?
有没有更好的方法来测试RESTful API或我应该使用的宝石?
答案 0 :(得分:0)
在Rails 4.0中从XML核心中删除了XML参数解析器。这是由于多个漏洞以及今天值得使用的大多数API都是JSON
或向JSON
移动的事实。
已删除的功能可从actionpack-xml_parser gem获得。