Posted at

spring + shoulda-matchersの設定

More than 3 years have passed since last update.

spring rspecでテストを回していて、has_manyな関係のテストを

RSpec.describe User, type: :model do

it{ is_expected.to have_many(:posts) }
end

てな感じで書けるなんて素敵!と思ってthoughtbot/shoulda-matchersを入れてみた。ら

Failures:

1) User should have many :posts
Failure/Error: it{ is_expected.to have_many(:posts) }
expected #<User:0x007f6081732cb8> to respond to `has_many?`
# ./spec/models/user_spec.rb:9:in `block (2 levels) in <top (required)>'
# -e:1:in `<main>'

怒られた。

何で?と思ってrspec spec/で走らせると、通る。

spring rspec spec/だと通らないのは何でだー!と思って調べたら

shoulda-matchers not working with spring · Issue #486 · thoughtbot/shoulda-matchers

に解決策が記されていました。


Gemfile

gem 'shoulda-matchers', require: false



rails_helper.rb

require 'shoulda-matchers'


と言う感じで読み込む必要があるようです。

shoulda-matchers not working with spring · Issue #486 · thoughtbot/shoulda-matchers

のコメントによればspringspec_helperGemfileを読み込んだrspecを読み込むのが原因みたいですが、ドキュメントに書いてあるほうが良いよなー、とか思ってたらthoughtbot/shoulda-matchers at v2.8.0に書いてあった

違うバージョンのドキュメントを読んでいたという話でした。