rubocop-rspec icon indicating copy to clipboard operation
rubocop-rspec copied to clipboard

Cop idea: Model Validations

Open ydakuka opened this issue 2 years ago • 1 comments

Reference: https://rspec.rubystyle.guide/#model-validations

Describe the solution you'd like

RSpec.describe '#title' do
  # bad
  it 'is required' do
    article.title = nil
    expect(article).not_to be_valid
  end

  # preferred
  it 'is required' do
    article.title = nil
    article.valid?
    expect(article.errors[:title].size).to eq(1)
  end
end

Rubocop

ydakuka@yauhenid:~/Work/project$ bin/rails_docker rubocop -V
1.56.2 (using Parser 3.2.2.3, rubocop-ast 1.29.0, running on ruby 2.7.8) [x86_64-linux]
  - rubocop-capybara 2.18.0
  - rubocop-factory_bot 2.23.1
  - rubocop-performance 1.19.0
  - rubocop-rails 2.21.0
  - rubocop-rake 0.6.0
  - rubocop-rspec 2.24.0
  - rubocop-thread_safety 0.5.1

ydakuka avatar Sep 10 '23 16:09 ydakuka

Now when I look at this guideline, I’d write the good example as something like

expect(article.errors).to have_key(:title)

Or would outright recommend using shoulda-matchers.

pirj avatar Sep 10 '23 20:09 pirj