在Ruby on Rails中,如果在该模型的规范(或单元测试)中测试给定模型的所有验证规则,是否仍然需要为每个验证编写Cucumber场景?
是否只需编写两个方案即可:一个用于输入有效数据,一个用于输入无效数据?
答案 0 :(得分:9)
这是一个很好的问题,答案是:这取决于。
您可以将Cucumber视为产品所有者,开发人员和测试人员之间的沟通方式。
如果您认为在Cucumber中进行验证会增加对产品功能的共同理解,那么请将它们保留在那里。
一种方法是将验证结合到场景大纲中:
Scenario Outline: User tries to register but skips a mandatory field
Given I am registering
And I leave the "<field>" blank
When I click "Submit"
Then I should see "<message>"
And I should not be registered
| field | message |
| Forename | Please enter your forename |
| Surname | Please enter your surname |
| Date of Birth | Please enter your date of birth |
答案 1 :(得分:1)
这是一个很好的问题,也是我最近一直在处理的问题。
对于您的组织可能有所不同,但在我的组织中,我们尝试将字段验证测试留给单元测试或其他更好地处理这些情况的框架。除此之外,我认为Cucumber纯粹用于自动化验收测试(AKA是您/您的团队和PO之间的通信工具),并且其他方法应该用于该范围之外的任何其他方法。
答案 2 :(得分:-1)
为什么要提出任何建议?就进行返工而言,允许开发人员做出假设具有固有的风险。
在不同情况下(创建,显示,编辑,角色),表单行为的每个字段显然是接受标准。
如果您将其隐藏在单元测试中,则表明它已从生活文档
中断开如果您真的对BDD感兴趣,那么您实际上就不需要单元测试。
Feature: Edit staff personal
Scenario Outline: Form validation
Given I am editing a staff personal details
And the form contains a "<Mandatory?>" field with a label "<Label>"
And text fields have a input length of between "<Min Length>" and "<Max Length>"
And select fields have these "<Options>"
When I submit the form by clicking the save button
Then an error displays if validation fails
But commits my changes if validation is successful and returns the form back to display mode
Examples:
| Label | Mandatory? | Type | Min length | Max length | Options
| Title | true | select | 0 | 0 | Mr, Mrs, Miss, Ms, Dr, Prof |
| Surname | true | text | 2 | 50 | null |
| Forename | true | text | 2 | 50 | null |
| Known as / Other Surname | false | text | 2 | 50 | null |
| Known as forename | false | text | 2 | 50 | null |
| Date of birth | true | date-picker | 0 | 0 | null |
| NI number | true | ni-number | 0 | 0 | null |