👀
RSpecで特定のテストを実行する方法
RSpec で特定のテストを実行する方法について書きます。
処理を追加したときや、落ちたテストを修正して確認したい時などに便利で使っています。
特定のテストだけを実行する方法
// 実行したいテストのファイル名と行数を指定
$ rspec spec/models/user_spec.rb:12
このようにファイル名と行数を指定すれば、特定のテストだけを実行することができますが、行数を確認する手間が掛かったり、複数のテストを実行したいときに困ります。
個人的には次の方法がおすすめです。
spec_helper.rb
に以下の記述を追記して、focus: true
を使えるようにします。
spec_helper.rb
RSpec.configure do |config|
config.filter_run_when_matching :focus
end
以下のように実行したいテストブロックに f
をつけることで、そのテストブロックのみ実行されます。
fdescribe
, fcontext
, fit
のように使うことができます
user_spec.rb
RSpec.describe User, type: :model do
describe "Validation" do
# テストは省略しています
it "is invalid without a name" do
end
# 実行したいテストブロックに f をつける。
fit "is invalid without a email" do
end
it "is invalid without a password" do
end
end
end
$ rspec spec/models/user_spec.rb
User
Validation
is invalid without a email
以下のように書いても OK ですが、上の書き方が楽なのであまり使わないかもしれません。
focus "is invalid without a email" do
end
it "is invalid without a email", focus: true do
end
it "is invalid without a email", :focus do
end
気をつけること
私はよくf
を消し忘れてしまいます。
Rubocop
で Class: RuboCop::Cop::RSpec::Focus
を設定しておくと消し忘れた場合に検知できます。あわせて pre-commit
や CI
を使って自動で Rubocop
を実行するようにしておくと便利です。
Discussion