作为学习经验,我正在开发一个小型 Rails 应用程序,该应用程序应该查询现有的 SOAP API/Web 服务(使用 handsoap gem),并将在那里收集的信息简单地呈现给用户。
我喜欢使用 rspec,并且习惯于 Cucumber 来测试我的应用程序。让我难过的部分是如何测试与 API 的交互,即来回传递 XML 请求和响应的“非呈现”部分。
非常感谢任何提示和指示!
谢谢!
作为学习经验,我正在开发一个小型 Rails 应用程序,该应用程序应该查询现有的 SOAP API/Web 服务(使用 handsoap gem),并将在那里收集的信息简单地呈现给用户。
我喜欢使用 rspec,并且习惯于 Cucumber 来测试我的应用程序。让我难过的部分是如何测试与 API 的交互,即来回传递 XML 请求和响应的“非呈现”部分。
非常感谢任何提示和指示!
谢谢!
看看fakeweb gem。
它有助于存根网络互操作性,即您可以创建测试响应:
FakeWeb.register_uri(:get, "http://example.com/test1", :body => "Hello World!")
并禁用发送 http 请求的能力:
FakeWeb.allow_net_connect = false
Net::HTTP.get(URI.parse("http://example.com/"))
=> raises FakeWeb::NetConnectNotAllowedError
使用最新版本的 Handsoap,您可以使用模拟 http 驱动程序在 http 级别进行模拟。请参阅:Http::HttpMock
以及中的示例tests/account_test.rb
我假设您在谈论功能/集成样式测试而不是单元测试,在这种情况下,我可能会考虑模拟 Web 服务的接口并在较低级别上对代码进行单元测试。
而是回到黄瓜。正如 Aslak Hellesøy 在Stack overflow q 810410中指出的那样,没有什么可以阻止您这样做。当您为实际要测试的行为编写场景时,您只需在步骤定义中实例化正确的对象并调用适当的方法。如果您需要的话,也可以将它与一些关于返回值或内容的断言结合起来。有关如何用黄瓜加载 rspec 的信息,请参阅Rspec 期望。should()