如何使用xml作为输入测试Rails RESTful API发布请求?

时间:2014-08-20 18:42:04

标签: ruby-on-rails ruby rspec

我正在为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或我应该使用的宝石?

1 个答案:

答案 0 :(得分:0)

在Rails 4.0中从XML核心中删除了XML参数解析器。这是由于多个漏洞以及今天值得使用的大多数API都是JSON或向JSON移动的事实。

已删除的功能可从actionpack-xml_parser gem获得。