一位同事和我一直在努力弄清楚如何使用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事情并没有这样做。有没有人以前做过这个并找到了可行的解决方案或解决方法?
答案 0 :(得分:5)
with_options
是一个可以传递给have_select(不是在has_select上调用的方法)的选项,用于检查特定选项元素是select的子元素(其他元素也可能存在)
要测试选择是否为多数,您可以执行
expect(page.find(:select, 'program')[:multiple]).to be_truthy
对于相反的
显然是错误的如果您正在运行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)
:Capybara 2.7发布时可能会包含多个过滤器