用黄瓜测试场景的正确方法(rails 2.3.8)

时间:2010-12-14 09:07:29

标签: ruby-on-rails cucumber bdd

所以,我开始构建一个新的应用程序,这是我从.net开始的第一个大型应用程序。

我真的想要BDD整个应用程序,所以我已准备好黄瓜并准备好了。

我已经编写了更多关于简单内容(删除,添加,更新)的测试等等,但现在我不知道如何测试这个场景。

我有这些模特 用户,帐户,计划 每个帐户都有一个计划,计划每个月都会计费(在帐户创建的同一天)。

我想测试选择计划,创建帐户,检查结算流程(即使是模拟,此时没有PayPal)。

我很感激这方面的帮助,只是为了强调,我不是在寻找完整的代码,只是解释一下(在概念上)你会如何进行测试。

此外,计划是可升级和降级的,所以我也想测试它。

提前感谢您的帮助

1 个答案:

答案 0 :(得分:3)

我喜欢在外部开发中练习,我们首先编写验收测试,然后进入单元测试来处理域逻辑。我们以创建一个帐户为例。

首先为所需功能编写一个Cucumber故事。例如:

Feature: Create an account
  In order to use the application
  As a user
  I want to create an account

  Scenario: Create an account from home page
    Given I am on the home page
    When I follow "Sign up"
    And I fill in "Username" with "bob"
    And I fill in "Password" with "test123"
    And I press "Create"
    Then I should see "You have successfully signed up! You may now sign in."

当我们使用cucumber features命令运行我们的Cucumber功能时,方案中的第一步将失败,因为主页尚不存在。要创建它,我们可能会将其视为一个单独的功能。因此,我们可能会编写另一个Cucumber功能,如:

  Scenario: Visitor visits the home page
    When I go to the home page
    Then I should see "Welcome to the Website of Awesomeness"

运行此功能,我们将发现Rails应用程序中没有定义根路由。一旦我们解决了这个问题,我们就需要一个控制器,视图和视图中的文本。到目前为止,我们只编写过Cucumber测试。

一旦所有这些功能都通过,我们就会意识到需要用户名。我们可以编写一个Cucumber步骤来测试这个案例:

  Scenario: Username must be filled out
    Given I am on the home page
    When I follow "Sign up"
    And I fill in "Password" with "test123"
    And I press "Create"
    Then I should see "Username cannot be blank."

为了实现这一点,我们必须为我们的模型添加一个验证包含用户名的验证。 现在我们将进行单元测试,因为我们正在修改域逻辑。作为一般规则,当您修改模型时,应该放入RSpec或Test :: Unit并直接测试该修改。例如,使用RSpec我们会添加一个规范来确保用户名必须存在(并且是唯一的等)。一旦这个测试通过,我们的场景也应该开始通过。

这是啰嗦,但它应该可以帮助你以非常真实的方式开始练习BDD。有关更多信息,请参阅RSpec书籍(其中包含有关使用Cucumber和RSpec的外部实践的大量信息):http://www.pragprog.com/titles/achbd/the-rspec-book