测试是否有空场的最佳实践

时间:2014-11-13 23:00:42

标签: cucumber

我有一个包含7个输入字段的表单。

情况是我想测试是否缺少任何字段,系统应该为缺少的字段提示错误。

所以我做了以下功能:

  Scenario: Sending request with an empty form
    Then I fill in "Phone" with "979000000"
    And I fill in "Name" with "John"
    And I fill in "Email" with "john@mail.me"
    And I fill in "Circumstance" with "Trash outside"
    And I fill in "Address" with "700 University Dr. E"
    And I fill in "Start Date" with "10/31/2014"
    And I fill in "End Date" with "11/01/2014"
    When I press "Submit request"
    Then I should see prompt for all missing fields

然后逐个删除字段并制作新方案。

这显然不是一个好习惯。有没有什么好方法可以测试所有领域?

2 个答案:

答案 0 :(得分:1)

我认为你可以使用Scenario Outline只制作“one”场景

Scenario Outline: Sending request with an uncomplete form
  Given/when I am on the form...
  When I fill the form with datas :
  | name   | email   | circumstance   | address   | start   | end   |
  | <name> | <email> | <circumstance> | <address> | <start> | <end> |
  When I press "Submit request"
  Then I should see prompt for missing field: <missing>

  Scenarios:
  | name | email        | circumstance  | address              | start      | end        | missing |
  |      | john@mail.me | Trash outside | 700 University Dr. E | 10/31/2014 | 11/01/2014 | name    |
  | john |              | Trash outside | 700 University Dr. E | 10/31/2014 | 11/01/2014 | email   |
  | john | john@mail.me | Trash outside | 700 University Dr. E | 10/31/2014 |            | end     |

大纲让您的场景播放多次:每个“场景”一行

然后,您需要完成所有非空数据的填充步骤。

When(/^I fill the form with datas :$/) do | table |
  datas = table.hashes.first
  datas.each do |label, value|
    if !value.empty?
      @browser.text_field(name: label).set value
    end
  end
end

然后,您可以添加包含多个空字段的示例,并检查值为“missing”的多个字段。

答案 1 :(得分:1)

黄瓜不是进行详尽测试的工具。

如果要测试模型是否验证每个字段的有效性,请使用单元测试。这样运行起来会更快,更容易实现。

如果您想显示提示您填写空字段的机制正在运行,请仅针对一个字段执行此操作(您知道它适用于其他字段,因为您的单元测试)。

编写类似

的功能
Scenario: Incomplete form
  When I fill in the form
  And I leave a required field empy
  Then I should see a missing field prompt

考虑这一点的一种方法是不要浪费时间测试平台代码,而是专注于测试应用程序代码。