Capybara

Capybara/CurrentPathExpectation

Enabled by default Safe Supports autocorrection Version Added Version Changed

Enabled

Yes

Yes

1.18

2.0

Checks that no expectations are set on Capybara’s current_path.

The have_current_path matcher should be used on page to set expectations on Capybara’s current path, since it uses Capybara’s waiting functionality which ensures that preceding actions (like click_link) have completed.

This cop does not support autocorrection in some cases.

Examples

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

# good
expect(page).to have_current_path('/callback')

# bad (does not support autocorrection)
expect(page.current_path).to match(variable)

# good
expect(page).to have_current_path('/callback')

Capybara/MatchStyle

Enabled by default Safe Supports autocorrection Version Added Version Changed

Pending

Yes

Yes

2.17

-

Checks for usage of deprecated style methods.

Examples

when using assert_style

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

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

when using 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

when using have_style

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

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

Capybara/NegationMatcher

Enabled by default Safe Supports autocorrection Version Added Version Changed

Pending

Yes

Yes

2.14

-

Enforces use of have_no_* or not_to for negated expectations.

Examples

EnforcedStyle: not_to (default)

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

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

EnforcedStyle: have_no

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

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

Configurable attributes

Name Default value Configurable values

EnforcedStyle

not_to

have_no, not_to

Capybara/SpecificActions

Enabled by default Safe Supports autocorrection Version Added Version Changed

Pending

Yes

No

2.14

-

Checks for there is a more specific actions offered by Capybara.

Examples

# 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/SpecificFinders

Enabled by default Safe Supports autocorrection Version Added Version Changed

Pending

Yes

Yes

2.13

-

Checks if there is a more specific finder offered by Capybara.

Examples

# bad
find('#some-id')
find('[visible][id=some-id]')

# good
find_by_id('some-id')
find_by_id('some-id', visible: true)

Capybara/SpecificMatcher

Enabled by default Safe Supports autocorrection Version Added Version Changed

Pending

Yes

No

2.12

-

Checks for there is a more specific matcher offered by Capybara.

Examples

# 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('foo')

Capybara/VisibilityMatcher

Enabled by default Safe Supports autocorrection Version Added Version Changed

Enabled

Yes

No

1.39

2.0

Checks for boolean visibility in Capybara finders.

Capybara lets you find elements that match a certain visibility using the :visible option. :visible accepts both boolean and symbols as values, however using booleans can have unwanted effects. visible: false does not find just invisible elements, but both visible and invisible elements. For expressiveness and clarity, use one of the symbol values, :all, :hidden or :visible. Read more in the documentation.

Examples

# 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)