Ruby on rails 如何用cucumber编写测试?

Ruby on rails 如何用cucumber编写测试?,ruby-on-rails,cucumber,Ruby On Rails,Cucumber,这是我第一次用cucumber做测试,我很难弄明白一件事。所以我已经有了一个检查用户创建的测试。我想添加更多步骤,如用户创建帐户和创建产品,并为这些对象设置一些属性 这是用户创建的特征文件 @no-database-cleaner Feature: Creating an user account In order to use Recdns portal I need to create an user account Scenario: Successful user ac

这是我第一次用cucumber做测试,我很难弄明白一件事。所以我已经有了一个检查用户创建的测试。我想添加更多步骤,如用户创建帐户和创建产品,并为这些对象设置一些属性

这是用户创建的特征文件

@no-database-cleaner

Feature: Creating an user account
  In order to use Recdns portal
  I need to create an user account

  Scenario:  Successful user account creation
    Given the database contains no test data
    And I am on the homepage
    When I attempt to create the following user account:
      | email address        | password | confirm password |
      | abc@company1.com  | password | password         |
  # User is automatically logged in
    Then I should see "Welcome!" message on page
    And an ar_id is set for the user
    And
    When I click "Sign Out"
    Then I should see "Signed out"
    When I attempt to sign in with following user account:
      | email address         | password |
      | abc@company1.com   | password |
    Then I should see "Welcome!" message on page

  Scenario Outline:  Verify error message when user failed to sign in
    Given there is a user
    And I am on the homepage
    And I try to login with email "<email address>", password "<password>"
    Then I should see "<error message>" message on page

  Examples:
    | email address                        | password          | error message                        |
    | testuser@company1.com                | abc1234           | Invalid email or password            |
    | testuserdoesnotexist@company1.com    | password          | Invalid email or password            |

  Scenario Outline:  Verify error message when user failed to sign up
    Given I am on the homepage
    And I click "Sign Up"
    And I try to create user with email "<email address>", password "<password>", confirm password "<confirm password>"
    Then I should see "<error message>" message on page

  Examples:
    | email address       | password          | confirm password      | error message                        |
    | abc@company1.com | abc123            | abc123                | Email has already been taken         |
    | xyz@test         | abc123            | abc123                | Email is invalid                     |
    |                     | abc123            | abc123                | Email can't be blank                 |
    | abc@company1.com |                   | abc123                | Password can't be blank              |
    | abc@company1.com | abc123            |                       | Password doesn't match confirmation  |
    | abc@company1.com | abc1              | abc1                  | Password is too short                |
@没有数据库清理程序
功能:创建用户帐户
为了使用Recdns门户
我需要创建一个用户帐户
场景:成功创建用户帐户
给定数据库不包含任何测试数据
我在主页上
当我尝试创建以下用户帐户时:
|电子邮件地址|密码|确认密码|
| abc@company1.com|密码|密码|
#用户将自动登录
然后我会在第页看到“欢迎”的信息
并且为用户设置ar_id
及
当我单击“注销”时
那么我应该看到“注销”
当我尝试使用以下用户帐户登录时:
|电子邮件地址|密码|
| abc@company1.com|密码|
然后我会在第页看到“欢迎”的信息
场景大纲:验证用户登录失败时的错误消息
假设有一个用户
我在主页上
我尝试使用电子邮件“”登录,密码为“”
然后我会看到第页的“”消息
示例:
|电子邮件地址|密码|错误消息|
| testuser@company1.com| abc1234 |无效的电子邮件或密码|
| testuserdoesnotexist@company1.com|密码|无效的电子邮件或密码|
场景大纲:当用户注册失败时验证错误消息
因为我在主页上
然后我点击“注册”
我尝试创建电子邮件为“”、密码为“”、确认密码为“”的用户
然后我会看到第页的“”消息
示例:
|电子邮件地址|密码|确认密码|错误消息|
| abc@company1.com| abc123 | abc123 |电子邮件已被接收|
| xyz@test| abc123 | abc123 |电子邮件无效|
|| abc123 | abc123 |电子邮件不能为空|
| abc@company1.com| | abc123 |密码不能为空|
| abc@company1.com| abc123 | |密码与确认不匹配|
| abc@company1.com| abc1 | abc1 |密码太短|

所以我可以在哪里添加步骤,比如创建account表和product表。谢谢

您的“创建用户帐户”方法是运行每个测试所需要的吗?如果是这样,我只需要创建一个助手,您可以在您的场景之前调用它。。比如@needs\u new\u account。cucumber最好的部分之一是能够重用环境。您可能不应该为每个场景创建新帐户。取而代之的是,让cucumber记住,它需要保留新帐户(即,不要删除它),如果可能的话,在您的其他场景中重用它。让我知道这是否有帮助。。不太确定我是否完全理解你的问题


此外,您不需要额外的“和”和“之间”和“和”和“何时”…小黄瓜语法处理和/何时/然后相同。

您是在问在哪里放置其他场景吗?或者步骤定义位于何处?如果是其他方案,您可以添加到当前的
.feature
文件中,或者使用新方案创建新的
.feature
文件。记住保持场景的独立性,这样你就不会依赖于之前场景的状态,这最终会导致脆弱的测试。你是如何做到的?重用环境?我有几个测试,我将在用户上使用。但现在,我的测试代码在每次运行测试时都会创建用户,我把它放在env.rb文件中,并为每个匹配的助手创建一个新的Before块。例如,假设您有一个名为@needs_login的助手,用于访问用户配置文件页面的功能(显然需要登录才能查看配置文件页面)。在这个特性中,您不需要多次检查登录是否有效,因为您将为每个场景执行相同的登录步骤。因此,你可以在你的功能前面引用你的登录需求,在你的env文件中写一个Before“method”helper,让测试跳过删除每个场景的cookies。我有一个主要关注移动的博客,但这似乎是该站点的一个很棒的主题。在接下来的几天里,我会在我的博客上发布一个你可以重复使用的例子(因为我不能在这里用少于500个字符来完成——哈哈),谢谢。我的测试中还有一个问题。我注册时的代码在记录上创建一堆,如帐户、用户\u选择的\u类别、过滤器。因此,当我运行测试时,除了用户选择的类别之外,所有内容都成功创建。用户\所选\类别为联接表。dev env中的我的代码运行良好,但无法在测试中创建用户所选类别。这是我的第一个测试用例,我不知道如何调试它。有什么建议吗?谢谢你的建议。太棒了!所有这些,或者只是需要帮助调试的部分(而不是环境)