【问题标题】:Proper way of interacting with a RESTful web service using Cucumber使用 Cucumber 与 RESTful Web 服务交互的正确方式
【发布时间】:2012-08-01 22:59:47
【问题描述】:

我正在使用 Cucumber 测试基于 Rails 的 Web 服务中的端到端应用程序行为。我目前有一个如下所示的场景大纲(在此构成一个假设场景,即与另一个用户一起创建用户):

  Scenario Outline: Create a user with another user
    Given I want to create a user as a user "<user>"
    When I create a user with name "<name>"
    And the user's age is "<age>"
    Then then the response should be "<response>"

Scenarios: Create user with 3 args
  | user  | name            | age              | response                    |
  | bob   |  joe            | 25               | <some_xml_response>         |

我有点难以弄清楚我应该如何为这个大纲编写步骤定义。基本上,我目前正在连接一个 XML blob(用于姓名+年龄),并且需要做一些类似于 rspec 使用 :post 发布到控制器并查看响应的事情。我的步骤定义目前如下所示:

Given /^I want to create a user with another user "([^"]*)"$/ do |user|
  @reqxml << "<user><creator>#{user}</creator>"
end

When /^I create a user with name "([^"]*)"$/ do |name|
  @reqxml << "<name>#{name}</name>
end

And /^the user's age is "([^"]*)"$/ do |age|
  @reqxml << "<age>#{age}</age>"
end

Then /^then the response should be "([^"]*)"$/ do |response|
 # ?? not sure if I can use rspec :post here?
end

改进这个 Cucumber 大纲的最佳方法是什么?我还有很多要测试的。在 rspec 中这是相当直截了当的,也许正确的答案是将其粘贴在 RSpec 中。但我真的很想更好地利用 Cucumber,并通过端到端用户故事测试获得更好的“更大”图景。

【问题讨论】:

    标签: ruby-on-rails ruby rspec cucumber


    【解决方案1】:

    我同时使用 capybara/rspec/cucumber 和 pickle 来最大限度地减少我必须编写的实际步骤定义量,并且通常它可以完成工作。

    Pickle 使诸如“Given a model exists with”之类的步骤自动可用,capybara 的 web 步骤负责浏览器自动化,例如“goto route”,或者还提供 css 和 xpath 函数来验证输出,例如“should包含”等......

    这样你可以测试你的整个堆栈,这是黄瓜的重点

    我个人的观点是,黄瓜是一种特定领域的语言,因此,可能并不总是能够以简洁的方式描述你正在尝试做的事情。 (想想复杂的对象关系)。如果您有非技术用户需要阅读您的测试,那么它非常好,但它不会击败普通的 rspec。

    你的黄瓜步骤也有点歪。 “给定”描述的是预先存在的条件,而不是你的目标。 “何时”应描述您为创建用户而采取的操作,“那么”应验证所采取的操作是否影响了您的目标。

    【讨论】:

      【解决方案2】:

      虽然我已经看到这样做了,但用 cucumber 测试 API 会带来一种特殊的痛苦。

      如果您的 API 真的很安静,那么为集成编写“控制器”规范实际上应该没问题。或者,如果您真的想要“适当的”全栈集成测试:帮自己一个忙,使用 capybara/rspec 而不是 Cucumber...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-10
        • 2011-08-10
        • 1970-01-01
        相关资源
        最近更新 更多