首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带RSpec的水豚-选择方框选项

带RSpec的水豚-选择方框选项
EN

Stack Overflow用户
提问于 2014-12-15 04:28:08
回答 1查看 3.7K关注 0票数 1

我在Rails 3.1.0、Ruby2.1.5和Rails 4.1.8中使用Capybara 2.4.3。此测试继续失败:

代码语言:javascript
复制
let(:attack_squad) { create :squad, user: attacker, name: 'Attack Squad' }

scenario 'attacker has available attack squad' do
  visit '/account/battles/new'
  save_and_open_page
  expect(page).to have_select 'Squad', options: [attack_squad.name]
end

使用save_and_open_page,我可以看到这个HTML正在生成:

代码语言:javascript
复制
<select id="battle_squad_id" name="battle[squad_id]">
  <option value="194">Attack Squad</option>
  <option value="192">Default Squad</option>
</select>

下面是失败的信息:

代码语言:javascript
复制
 Battle Management attacker has available attack squad
 Failure/Error: expect(page).to have_select 'Squad', options: [attack_squad.name]
   expected to find select box "Squad" with options ["Attack Squad"] but there were no matches. Also found "Attack Squad Default Squad", which matched the selector but not all filters.
 # ./spec/features/battle_spec.rb:31:in `block (2 levels) in <top (required)>'
 # -e:1:in `<main>'

我遵循与在GitHub上演示了capybara规范相同的格式。如果我将预期改为:

代码语言:javascript
复制
expect(page).to have_select 'Squad'

它能够找到选中的框并成功传递。如果我将options:值设置为数组以外的任何值,则会给出一个关于sort方法上存在的错误。我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-15 15:46:45

在测试选择列表是否存在时,有两个与选项相关的筛选器:

  • 选项--这将检查select列表选项是否与指定的数组完全匹配。
  • :with_options --这将检查select列表选项是否至少包含指定数组中的选项。

测试失败是因为期望HTML没有“默认团队”选项:

代码语言:javascript
复制
<select id="battle_squad_id" name="battle[squad_id]">
  <option value="194">Attack Squad</option>
</select>

您需要指定所有预期选项:

代码语言:javascript
复制
let(:attack_squad) { create :squad, user: attacker, name: 'Attack Squad' }
let(:default_squad) { create :squad, user: attacker, name: 'Default Squad' }

scenario 'attacker has available attack squad' do
  visit '/account/battles/new'
  save_and_open_page
  expect(page).to have_select 'Squad', options: [attack_squad.name, default_squad.name]
end

或者,如果您只关心一个选项,则使用:with_options筛选器:

代码语言:javascript
复制
let(:attack_squad) { create :squad, user: attacker, name: 'Attack Squad' }

scenario 'attacker has available attack squad' do
  visit '/account/battles/new'
  save_and_open_page
  expect(page).to have_select 'Squad', with_options: [attack_squad.name]
end
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27477363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档