Capybara

Capybara/ClickLinkOrButtonStyle

默认启用 安全 支持自动更正 添加版本 更改版本

待定

2.19

2.20

检查按钮或链接点击的方法。

默认情况下,优先使用 click_link_or_buttonclick_on。这些方法提供了测试和 HTML 之间的较弱耦合,允许更忠实地反映用户行为。

您可以设置 EnforcedStyle: strict 以优先使用 click_linkclick_button,但这已是一个弃用的设置。

示例

# bad
click_link('foo')
click_button('foo')

# good
click_link_or_button('foo')
click_on('foo')

EnforcedStyle: strict

# bad
click_link_or_button('foo')
click_on('foo')

# good
click_link('foo')
click_button('foo')

可配置属性

名称 默认值 可配置值

EnforcedStyle

link_or_button

link_or_button, strict

Capybara/CurrentPathExpectation

默认启用 安全 支持自动更正 添加版本 更改版本

启用

始终

1.18

2.0

检查 Capybara 的 current_path 上是否设置了任何期望。

应在 page 上使用 have_current_path 匹配器 来设置对 Capybara 当前路径的期望,因为它使用 Capybara 的等待功能,确保前面的操作(如 click_link)已完成。

此 cop 在某些情况下不支持自动更正。

示例

# bad
expect(current_path).to eq('/callback')
expect(page.current_path).to eq('/callback')

# good
expect(page).to have_current_path('/callback', ignore_query: true)

# bad (does not support autocorrection when `match` with a variable)
expect(page).to match(variable)

Capybara/MatchStyle

默认启用 安全 支持自动更正 添加版本 更改版本

待定

始终

2.17

-

检查是否使用过时的样式方法。

示例

使用 assert_style

# bad
page.find(:css, '#first').assert_style(display: 'block')

# good
page.find(:css, '#first').assert_matches_style(display: 'block')

使用 has_style?

# bad
expect(page.find(:css, 'first')
  .has_style?(display: 'block')).to be true

# good
expect(page.find(:css, 'first')
  .matches_style?(display: 'block')).to be true

使用 have_style

# bad
expect(page).to have_style(display: 'block')

# good
expect(page).to match_style(display: 'block')

Capybara/NegationMatcher

默认启用 安全 支持自动更正 添加版本 更改版本

待定

始终

2.14

2.20

强制使用 have_no_*not_to 进行否定期望。

示例

EnforcedStyle: have_no (默认)

# bad
expect(page).not_to have_selector 'a'
expect(page).not_to have_css('a')

# good
expect(page).to have_no_selector 'a'
expect(page).to have_no_css('a')

EnforcedStyle: not_to

# bad
expect(page).to have_no_selector 'a'
expect(page).to have_no_css('a')

# good
expect(page).not_to have_selector 'a'
expect(page).not_to have_css('a')

可配置属性

名称 默认值 可配置值

EnforcedStyle

have_no

have_no, not_to

Capybara/RedundantWithinFind

默认启用 安全 支持自动更正 添加版本 更改版本

待定

始终

2.20

-

检查冗余的 within find(…​) 调用。

示例

# bad
within find('foo.bar') do
  # ...
end

# good
within 'foo.bar' do
  # ...
end

# bad
within find_by_id('foo') do
  # ...
end

# good
within '#foo' do
  # ...
end

Capybara/特定操作

默认启用 安全 支持自动更正 添加版本 更改版本

待定

2.14

-

检查是否有 Capybara 提供的更具体的动作。

示例

# bad
find('a').click
find('button.cls').click
find('a', exact_text: 'foo').click
find('div button').click

# good
click_link
click_button(class: 'cls')
click_link(exact_text: 'foo')
find('div').click_button

Capybara/特定查找器

默认启用 安全 支持自动更正 添加版本 更改版本

待定

始终

2.13

-

检查是否有 Capybara 提供的更具体的查找器。

示例

# bad
find('#some-id')
find('[id=some-id]')
find(:css, '#some-id')
find(:id, 'some-id')

# good
find_by_id('some-id')

Capybara/特定匹配器

默认启用 安全 支持自动更正 添加版本 更改版本

待定

2.12

-

检查是否有 Capybara 提供的更具体的匹配器。

示例

# bad
expect(page).to have_selector('button')
expect(page).to have_no_selector('button.cls')
expect(page).to have_css('button')
expect(page).to have_no_css('a.cls', href: 'http://example.com')
expect(page).to have_css('table.cls')
expect(page).to have_css('select')
expect(page).to have_css('input', exact_text: 'foo')

# good
expect(page).to have_button
expect(page).to have_no_button(class: 'cls')
expect(page).to have_button
expect(page).to have_no_link('foo', class: 'cls', href: 'http://example.com')
expect(page).to have_table(class: 'cls')
expect(page).to have_select
expect(page).to have_field(with: 'foo')

Capybara/可见性匹配器

默认启用 安全 支持自动更正 添加版本 更改版本

启用

1.39

2.0

检查 Capybara 查找器中的布尔可见性。

Capybara 允许您使用 :visible 选项查找与特定可见性匹配的元素。:visible 接受布尔值和符号作为值,但使用布尔值可能会产生意想不到的效果。visible: false 不会只查找不可见元素,而是查找可见和不可见元素。为了表达性和清晰度,请使用符号值之一,:all:hidden:visible。在 文档 中了解更多信息。

示例

# bad
expect(page).to have_selector('.foo', visible: false)
expect(page).to have_css('.foo', visible: true)
expect(page).to have_link('my link', visible: false)

# good
expect(page).to have_selector('.foo', visible: :visible)
expect(page).to have_css('.foo', visible: :all)
expect(page).to have_link('my link', visible: :hidden)