Capybara选择使用db调用动态填充的选择框

时间:2013-11-07 07:33:57

标签: ruby-on-rails ruby-on-rails-3 cucumber capybara bdd

在我的索引视图中,我有以下选择框定义

 <%= select_tag('Country', options_for_select(@countries), :class => 'chosen-select') %>

@countries在索引控制器中填充如下:

  @countries = CountryCode.uniq.pluck(:name)

因此,正如您所看到的那样,正在进行数据库调用以获取国家/地区名称列表以填充选择框。 现在,在我的Cucumber步骤定义文件中我有

Then(/^I should see a select\-box for Countries$/) do
  select 'UNITED STATES', :from => 'Country'
end

这给了我错误Unable to find option "UNITED STATES" (Capybara::ElementNotFound) 但是当我在浏览器中检查时,选择框确实有该选项。使用capybara为具有硬编码选项值的选择框选择元素工作正常,但在上述情况下,使用数据库调用获取选项时,步骤定义失败。我该如何解决这个问题?

请帮助 谢谢

1 个答案:

答案 0 :(得分:0)

CountryCode是ActiveRecord模型吗?如果是这样,数据库可能是空的,这可以解释为什么规范中没有出现任何值,但开发工作正常。

您可能希望在规范的挂钩中使用类似以下内容的方式存根CountryCode调用:

Before do
  arel_double = double(:arel)
  CountryCode.stub(:uniq).and_return(arel_double)
  arel_double.stub(:pluck).with(:name).and_return(['ARUBA', 'UNITED STATES'])
end

确切的语法取决于您的存根库。