7

我理解命令式和声明式黄瓜步骤之间的区别,但我还没有看到任何现实世界的例子。我总觉得我的功能文件变得太冗长了。

似乎生命周期中的每个步骤都需要一个黄瓜功能:

  • foobars/list_foobars.feature
  • foobars/create_foobar.feature
  • foobars/view_foobar.feature
  • foobars/edit_foobar.feature
  • foobars/delete_foobar.feature

仅在创建功能中,您似乎想要列出可以输入的字段、哪些字段是必需的、输入无效数据时会发生什么等。我不知道执行此操作的声明性方法。当然,在后续功能中,您只会说Given a foobar exists而不是通过所有步骤来创建一个。

在描述应用程序的行为时,您有多详细?您能否提供一些您认为完整的功能文件示例?

4

2 回答 2

4

我喜欢保持黄瓜测试人类可读,所以假设我们有一个使用无效数据编辑 foobar 的故事,我想要这样的场景:

# foobars/edit_foobar.feature
Feature: As a user, I want to edit a Foobar, so I can Baz

Scenario: Validation Errors
  Given I am logged in as a user
  And a foobar exists
  And I edit the foobar with invalid data
  Then I should see validation errors

我认为这可以捕捉到我们想要从故事中得到的东西,而不必处理要编辑的字段、要提交的按钮等所有细节。它并没有测试所有可能的情况,但这些情况确实应该通过以下方式进行测试单元测试(设置验证的模型测试,以及设置闪存消息的控制器测试或正在处理错误的请求测试)。

其他场景类似:

Scenario: Successful Edit
  Given I am logged in as a user
  And a foobar exists
  And I edit the foobar with valid data
  Then I should see the valid data

有些人希望将有效数据指定为测试本身的一部分,但我个人更喜欢将这些委托给步骤定义,以保持场景简洁。您只需要一个示例来确保黄金案例有效,因为这又不是测试所有表单字段是否有效的合适地方(如果您指定每个字段,这将成为维护方面的难题)。

于 2013-06-26T03:43:50.443 回答
-1

我在想也许根本不用 Cucumber 来测试这个,而只是在 Feature 部分发表评论。

或者,也许可以做这样的事情:

# categories.feature

Scenario: Manage categories 
    Given I want to manage categories
    When I <crud_type> a category
    Then I should be taken to the listing page

    Examples:
      | crud_type | 
      | create    | 
      | edit      |  
      | delete    |  

Scenario: View category
    Given I want to view a particular category
    When I click on a category in the category list
    Then I should see that category's view page
于 2015-09-10T10:11:01.657 回答