RSpecでフィルターを使って実行するテストを絞り込む

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

上手に使い分けたいところです。


タグ Ruby, Ruby on Rails | パーマリンク.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です