黄瓜场景大纲与数据表 - 未找到水豚元素

时间:2017-07-15 10:00:12

标签: cucumber capybara scenarios

如何根据输出10个不同变量的变量编写方案大纲来测试计算?

我尝试了各种选项并遇到各种错误,包括:

Unable to find option "<frequency>" (Capybara::ElementNotFound)

(Cucumber::ArityMismatchError)

下面的代码给出了Capybara :: ElementNotFound错误

Scenario Outline:
  When  I select "<frequency>" frequency
  And   I press recalculate
  Then  I should see total amount and percentages recalculated by <frequency> frequency on the results page

Examples:
  | frequency |
  | weekly    |
  | daily     |

Examples:
  | tax   | sub-total | total  |
  | 38.25 | 114.74    | 191.24 |
  | 3.19  | 9.56      | 15.94  |

步骤定义

When(/^I select "([^"]*)" frequency$/) do |frequency|
  select "<frequency>", from: "frequency"
end

Then(/^I should see total amount and percentages recalculated by <frequency> frequency on the results page$/) do |table|
  expect(results_page).to have_content("<tax>")
  expect(results_page).to have_content("<sub_total>")
  expect(results_page).to have_content("<total>")
end

表格标记

<form action="change_result_frequency" method="post">
  <label for="frequency">Frequency</label>
  <select name="frequency" id="frequency">
    <option value="yearly">yearly</option>
    <option value="monthly">monthly</option>
    <option selected="selected" value="weekly">weekly</option>
    <option value="daily">daily</option>
  </select>
  <input type="submit" name="commit" value="Recalculate">
</form>

我是黄瓜和水豚的新手,所以我不确定如何用数据表编写场景轮廓。我做错了什么?

2 个答案:

答案 0 :(得分:0)

您所做错的是尝试撰写有关计算在您的功能中的工作方式的详细信息。相反,你应该尝试做的是使用你的功能来解释你在做什么(它与频率有关,但我不知道)。当您采用这种方法时,由于多种原因,您无需在场景中指定实际结果

  1. 结果的值与此类测试无关。
  2. 将结果放在方案中很困难,容易出错(错别字)并大大增加维护成本
  3. 我会更多地解释第1点。

    在这种情况下,您应该做的是推动您正在使用的更改频率功能的开发。这包括两部分

    i)您有一个用户界面可以更改频率,并且为了响应此操作,您的用户界面会显示频率变化的结果。

    ii)当您更改频率时,会计算出正确的结果

    第一部分应该由黄瓜场景驱动,所以你可以编写像

    这样的东西

    Given ... When I change the frequency Then I should see a new set of results

    第二部分不应该通过在Cucumber中编写场景来测试。相反,你应该为进行频率计算的东西编写单元测试。编写单元测试允许你

    • 编写更快的测试
    • 编写更多测试,以便处理边缘情况
    • 用编程语言编写测试,以便轻松生成和使用任何类型的值

    我认为Cucumber的新用户现在最大的错误就是使用场景大纲和示例表。我建议你远离他们。每次你想使用一站并思考。提出问题

    1. 我在这里测试什么,为什么重要
    2. 我试图证明某些东西有效吗?如果是这样的话,我不应该使用单元测试来证明。
    3. 祝你好运:)

答案 1 :(得分:0)

您的Scenario Outline应该只有一个示例表,您需要访问大纲中的“变量”。所以类似于以下内容(相应地更新了步骤定义)

Scenario Outline:
  When  I select "<frequency>" frequency
  And   I press recalculate
  Then  I should see <tax>, <sub-total>, and <total> recalculated on the results page

Examples:
  | frequency |  tax   | sub-total | total  |
  | weekly    |  38.25 | 114.74    | 191.24 |
  | daily     |  3.19  | 9.56      | 15.94  |