Cucumber场景大纲和数据表-未找到Capybara元素

Cucumber场景大纲和数据表-未找到Capybara元素,cucumber,capybara,scenarios,Cucumber,Capybara,Scenarios,我如何编写一个场景大纲来测试基于一个变量的计算,该变量输出10个不同的变量 我尝试了各种选项,并出现了各种错误,包括: Unable to find option "<frequency>" (Capybara::ElementNotFound) 下面的代码给出了Capybara::ElementNotFound错误 Scenario Outline: When I select "<frequency>" frequency And I press re

我如何编写一个场景大纲来测试基于一个变量的计算,该变量输出10个不同的变量

我尝试了各种选项,并出现了各种错误,包括:

Unable to find option "<frequency>" (Capybara::ElementNotFound)
下面的代码给出了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  |
场景大纲:
当我选择“”频率时
然后我按重新计算
然后我会在结果页面上看到按频率重新计算的总金额和百分比
示例:
|频率|
|周报|
|每日|
示例:
|税金|小计|总计|
| 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
当(/^I选择“([^”]*)”频率$/)do |频率|
从“频率”中选择“”
结束
然后(/^我应该在结果页面$/)上看到按频率重新计算的总金额和百分比do |表|
期望(结果页面)。有内容(“”)
期望(结果页面)。有内容(“”)
期望(结果页面)。有内容(“”)
结束
表单标记

<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>

频率
每年的
月刊
每周的
每日的

我不熟悉cucumber和capybara,因此我不确定如何使用数据表编写场景大纲。我做错了什么?

你做错的是试图在功能中编写有关计算工作的细节。相反,你应该尝试使用功能来解释你在做什么(这与频率有关,但除此之外我不知道)。当你采用这种方法时,你不会因为一些原因而费心在场景中指定实际结果

  • 结果的值与这类测试无关
  • 将结果放到场景中是困难的,容易出错(打字错误),并且大大增加了维护成本
  • 我将进一步解释第1点

    在这个场景中,您应该做的是推动您正在工作的变更频率功能的开发

    i) 您有一个用户界面供用户更改频率,并且您的用户界面显示频率更改的结果以响应此操作

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

    第一部分,应该由cucumber中的一个场景驱动,因此您可以编写如下内容

    
    鉴于
    当我改变频率时
    然后我会看到一组新的结果
    

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

    • 编写更快的测试
    • 编写更多测试,以便处理边缘情况
    • 用编程语言编写测试,以便轻松生成和使用任何类型的值
    我现在看到的新用户犯的最大错误是使用场景大纲和示例表。我建议你远离它们。每次你想使用一站式思考。问问题

  • 我在这里测试什么?为什么它很重要
  • 我是在试图证明某些东西是有效的吗?如果是的话,我不应该用单元测试来证明吗

  • 祝您好运:)

    您应该只有一个示例表和您的场景大纲,您需要访问大纲中步骤中的“变量”。因此,类似以下内容(步骤定义相应更新)

    场景大纲:
    当我选择“”频率时
    然后我按重新计算
    然后我会看到,并在结果页面上重新计算
    示例:
    |频率|税|小计|总计|
    |每周| 38.25 | 114.74 | 191.24|
    |每日| 3.19 | 9.56 | 15.94|
    
    <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>
    
    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  |