Ruby on rails 需要朝正确的方向推动,才能在Rails中编写我的第一个功能测试

Ruby on rails 需要朝正确的方向推动,才能在Rails中编写我的第一个功能测试,ruby-on-rails,automated-tests,functional-testing,Ruby On Rails,Automated Tests,Functional Testing,在过去的几天里,我静静地阅读了一些关于Rails测试的文档,我坐下来写我的第一个真正的测试,但不完全确定如何将我学到的知识结合起来,以实现下面的功能测试(测试控制器) 我需要向URL发送GET请求并传递3个参数(简单web服务),如果功能正常,只返回关键字true,否则返回关键字false——返回它的唯一值&不包含在任何、或其他标记中 测试应该断言,如果返回“true”,则测试成功 这可能很简单,所以对于这样一个没有挑战性的问题,我深表歉意 如果有人能告诉我如何开始写作,特别是如何测试回复,我将

在过去的几天里,我静静地阅读了一些关于Rails测试的文档,我坐下来写我的第一个真正的测试,但不完全确定如何将我学到的知识结合起来,以实现下面的功能测试(测试控制器)

我需要向URL发送GET请求并传递3个参数(简单web服务),如果功能正常,只返回关键字
true
,否则返回关键字
false
——返回它的唯一值&不包含在任何
或其他标记中

测试应该断言,如果返回“true”,则测试成功

这可能很简单,所以对于这样一个没有挑战性的问题,我深表歉意

如果有人能告诉我如何开始写作,特别是如何测试回复,我将非常感激

你读过吗?非常好

您的测试可能看起来像:

def test_should_get_index
  get :index, :a => "1", :b => "2", :c => "3"
  assert_response :success
  assert_equal "true", @response.body
end

如果这是对您自己的应用程序的测试,那么根据您的偏好,类似的测试可以作为功能测试或集成测试来完成。集成测试更“真实”,因为它们使用真实的URL和路由,而功能测试只是执行特定的控制器操作

对于外部服务,您真正需要的只是使用Test::Unit或其他框架(如rspec或Cucumber)作为测试定义的包装器

在某种类型的类中定义发出此GET请求的方法,然后编写测试该方法的工具。例如:

def test_expected_response
  assert_equal 'true', MyHelper.make_call('param_a', 'param_b', 'param_c')
end
显然,除非正确定义MyHelper和MyHelper.make_调用,否则此测试将失败,但这并不难:

class MyHelper
  def make_call(a, b, c)
    # Call service using Net::HTTP, Curb, etc.
    # ...
    # Return answer
  end
end

谢谢你,约翰,我确实做到了——正如你所说的,这很好。我不知道如何测试响应的主体…此时正在碰壁。大多数示例都涉及解析标记。谢谢Tadman,我喜欢类/线束模型,非常可扩展!只是想知道将MyHelper类放在Rails目录结构的何处(就像放这些测试类的最佳实践位置一样),在lib中?如果将它们放在app/models中,它们将在开发环境中自动重新加载,这可以简化调试。如果你把它们放在lib中,它们就不会弄乱你的模型目录。两者都应该有效。