ruby-on-rails - 如何在 Rails 应用程序中使用 Capybara 测试多选选择框?

标签 ruby-on-rails ruby rspec capybara

我和一位同事一直在努力弄清楚如何使用 select 元素测试 Rails 表单,我们有时希望它成为标准的选择下拉列表,有时又希望成为多选框。

我们可以在 RSpec 功能规范中添加什么来测试它?这是我们要测试的代码:

    <% if @use_multi_select %>
      <%= select_tag :program, options_for_select(@programs), { multiple: true } %>
    <% else %>
      <%= select_tag :program, options_for_select(@programs) %>
    <% end %>

下面是我对测试的想法:

    context 'when @use_multi-select == true' do
      it 'displays a multi-select select box' do
        expect(page).to have_select('program').with_options(multiple: true)
      end
    end

    context 'when @use_multi-select == false' do
      it 'displays a standard select box' do
        expect(page).to have_select('program').with_options(multiple: false)
      end
    end

但是整个 with_options 的东西不是那样工作的。有没有人以前这样做过并找到了可行的解决方案或解决方法?

最佳答案

with_options 是一个选项,可以传递给 have_select(不是在 have_select 上调用的方法)以检查特定选项元素是否是选择的子元素(其他元素也可能存在)

要测试一个选择是否是多个你可以做

expect(page.find(:select, 'program')[:multiple]).to be_truthy

显然是相反的 be_falsey

如果你运行的是 Capybara 2.6.x,你可以这样做

Capybara.modify_selector(:select) do
  filter(:multiple, boolean: true) { |node, value| !(value ^ node[:multiple]) }
end

这会让你做

expect(page).to have_select('program', multiple: true)

:multiple 过滤器可能会在发布时包含在 Capybara 2.7 中

关于ruby-on-rails - 如何在 Rails 应用程序中使用 Capybara 测试多选选择框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35180660/

相关文章:

ruby-on-rails - 模块的 Rails 未定义方法

java - JRuby DSL封装,排除标准库

ruby - 确定 http ://foo. com 是否重定向到 http ://www. foo.com

ruby-on-rails - 如果设置了 graphQL 字段方法参数默认值,则使用 RSpec 进行测试

ruby-on-rails - RSpec - 模拟类方法

ruby-on-rails - 如何找到 rake 任务的源文件?

ruby-on-rails - 使用 Ruby 中的 MailChimp API 3.0 订阅电子邮件

ruby-on-rails - rails 5 : Adding extra characters on the links

Ruby 的 "hello world".scan(/(\w){2}/) 和 "hello world".scan(/\w{2}/) 不一样?

ruby-on-rails - Rspec-view-file 不知道我的路线