luc*_*cas 2 ruby rspec ruby-on-rails 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 %>
Run Code Online (Sandbox Code Playgroud)
这就是我正在考虑的测试:
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
Run Code Online (Sandbox Code Playgroud)
但整个with_options事情并没有这样做.有没有人以前做过这个并找到了可行的解决方案或解决方案?
with_options 是一个可以传递给have_select的选项(不是在has_select上调用的方法)来检查特定选项元素是否为select的子元素(其他元素也可能存在)
要测试选择是否是多个,您可以执行此操作
expect(page.find(:select, 'program')[:multiple]).to be_truthy
Run Code Online (Sandbox Code Playgroud)
对于相反的事情显然是相反的
如果您正在运行Capybara 2.6.x,那么您可以这样做
Capybara.modify_selector(:select) do
filter(:multiple, boolean: true) { |node, value| !(value ^ node[:multiple]) }
end
Run Code Online (Sandbox Code Playgroud)
然后会让你这样做
expect(page).to have_select('program', multiple: true)
Run Code Online (Sandbox Code Playgroud)
:多重过滤器可能会在Capybara 2.7发布时包含在内
| 归档时间: |
|
| 查看次数: |
935 次 |
| 最近记录: |