Ruby on rails 如何断言操作返回正确的文本?

Ruby on rails 如何断言操作返回正确的文本?,ruby-on-rails,functional-testing,Ruby On Rails,Functional Testing,是否有标准或最佳实践方法来测试rails中的操作是否返回正确的文本?例如,我有一个用于执行ajax验证的简单操作,它执行以下操作: def get_object_id if params[:id].blank? return render(:text => -1, :layout => false) end my_object = MyObject.find_by_id(params[:id].strip) # If the object is valid

是否有标准或最佳实践方法来测试rails中的操作是否返回正确的文本?例如,我有一个用于执行ajax验证的简单操作,它执行以下操作:

def get_object_id
  if params[:id].blank?
    return render(:text => -1, :layout => false)
  end

  my_object = MyObject.find_by_id(params[:id].strip)

  # If the object is valid return the object id
  if my_object and my_object.active?
    return render(:text => my_object.id, :layout => false)
  end

  # Otherwise, return -1
  return render(:text => -1, :layout => false)
end
现在,我正在测试中使用@response对象。。。i、 e:

def test_get_object_id_returns_invalid_for_non_existent_id
  # Act
  get :get_object_id, :id => 999

  # Assert
  assert_response :success
  assert_equal "-1", @response.body
end
但是,尽管我对rails基本上是新手,但到目前为止我所看到的似乎表明,除了检查
@request.body
之外,可能还有更好的方法来实现这一点


所以,我向各位ruby专家提出的问题是:这是最好的方法吗?

我想你已经找到了

assert\u select
只适用于XML内容,因此对于其他格式,您必须自己使用。如果我做了很多这样的工作,我可能会在
ActionController::TestCase
中添加一个命名断言方法

e、 g


这将允许您跳过引号。

这是个好主意。你是指ActionController::TestCase而不是ActionController::TestClass吗?我似乎找不到关于后者的任何文件。
def assert_response_equals(v)
  assert_equal v.to_s, @response.body, "Expected response body to be #{v.inspect}"
end