【问题标题】:Data inserted in Cucumber tests not populating Dropdown在 Cucumber 测试中插入的数据未填充 Dropdown
【发布时间】:2012-03-07 19:36:33
【问题描述】:

免责声明:我仍然是 Rails/Cucumber 新手,但我正在努力学习。在阅读 RailsInAction 书籍并尝试编写自己的步骤时,我仍在使用 Cucumber 的“web_steps”。我明白他们为什么被带走,我会去那里的。

  • 问题:

在我的一个 Cucumber 场景中,我正在填充一些数据并尝试使用这些数据来填充下拉列表。数据肯定是被插入的,我知道这一点是因为我写了一个步骤来测试数据是否确实存在。

然后假设填充 DropDown 并且我尝试从该 DropDown 中“选择”我收到错误“*无法选择选项,在选择框 'result_winner' (Capybara::ElementNotFound)* 中没有带有文本 'Steven' 的选项”

我确信我错过了一些基本的东西,但我现在已经浪费了大约一个小时,我需要一些帮助。

  • 我的代码:

测试:

When I follow "Record new Result"
And the users "Steven, Joshua" exist
And I select "Steven" from "result_winner"

测试步骤:

When /^the users "([^"]*)" exist$/ do |playerNames|
  @names = playerNames.scan(/[\w']+/)

  for name in @names
    @newPlayer = Player.new
    @newPlayer.name = name
    @newPlayer.save
  end
end

然后查看_form.html.erb中的代码:

<p>
    <%= f.label :winner %>
    <%= select("result", "winner", @players.map {|p| [p.name, p.id]}) %>
</p>

控制器:

  def new
    @result = Result.new
    @players = Player.find(:all)
  end

如果我使用名称手动填充开发数据库并将其加载到浏览器中,下拉列表中会填充数据并且可以正常工作。我很确定我误解了测试数据何时/何地可见,或者如何测试并从下拉列表中选择数据。

任何帮助将不胜感激。

【问题讨论】:

    标签: ruby-on-rails cucumber capybara


    【解决方案1】:

    在我看来,这是一个简单的步骤顺序问题。您正在访问该页面,然后填充数据库,但该页面不会重新加载以考虑新的数据库值。如果您交换前两个步骤的顺序,我希望这会解决它。

    需要明确的是,cucumber 将逐行逐行遍历您的场景:

    1. 加载网页(其中不包含您的测试数据)
    2. 将数据插入数据库
    3. 在下拉列表中查找该数据(该数据在数据进入数据库之前已加载,因此该数据不存在)

    【讨论】:

    • 谢谢!我知道我错过了一些基本的东西!
    【解决方案2】:

    您的“用户“Steven, Joshua”存在”应该在 Given 步骤中。

    它描述了一个动作完成之前的状态。

    Given the users "Steven, Joshua" exist
    When I follow "Record new Result"
    And I select "Steven" from "result_winner"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-25
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多