如何编写声明性Cucumber功能来描述CRUD操作?

时间:2013-06-26 03:31:10

标签: cucumber

我理解imperative and declarative cucumber steps之间的区别,但我还没有看到任何真实世界的例子。我总觉得我的功能文件变得过于冗长。

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

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

仅在创建功能中,您似乎想要列出可以输入的字段,需要哪些字段,输入无效数据时会发生什么等等。我不知道是否有声明的方式做这个。当然,在后续功能中,您只需说Given a foobar exists而不是完成创建一个步骤的所有步骤。

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

1 个答案:

答案 0 :(得分: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

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