RSpecネタです。
Guardを使ってテストをしていると、変更が起きたRSpecファイルのテストを全実行されるので、デグレを起こしてないかどうかを調べるという意味では安心なのですが、テストが長くなると実行時間が長くて辛い…ということがあると思います(というかありました)。
今書いているところだけテストしてほしいんよ!!と思って、The RSpec Book
を調べていたらありました。フィルター機能。
# coding: utf-8
require 'spec_helper'
# フィルター用の設定を記述
RSpec.configure do |c|
c.filter = {focus: true}
end
describe User do
shared_examples_for "ユーザーの各権限共通の動作" do
its(:name) { should == "hogehoge" }
its(:email) { should == "hogehoge@example.com" }
end
# 実行したいテストにfocus: trueを追記する
context "管理者の場合", focus: true do
subject { FactoryGirl.create(:user, type: "admin") }
it_behaves_like "ユーザーの各権限共通の動作"
its(:type) { should == "admin" }
end
# 略
end
これを書くと、focus: trueが書かれているテストのみ実行してくれます。
describe, context, it単位で書くことができるので、自由に粒度を調節できます。
終わったら、フィルターを削除するなりコメントアウトするなりしましょう。
また、逆バージョンの除外フィルターもあります。
このテストだけ実行しない、というパターンです。
RSpec.configure do |c|
c.exclusion_filter = {slow: true}
end
上手に使い分けたいところです。
