江の島エンジニアBlog
Rails4のActiveRecord向けRSpecカスタムマッチャ5選(第3回)
RSpec

RSpecカスタムマッチャでデータベースの外部キー制約をテストする

Railsでモデルを作る時に外部キー制約テストも簡単に書きたかったのでカスタムマッチャを作りました。 (2014/09/10)

RSpecカスタムマッチャでデータベースの外部キー制約をテストする

前々回のNOT NULL制約カスタムマッチャの記事前回のUNIQUE制約カスタムマッチャの記事でDBの制約テストを簡単にしてきましたが、DB制約のRSpecカスタムマッチャも作りました。

例えば

describe Person do
  subject { FactoryGirl.create(:person) }
  it { should have_foreign_key_constraint_on(:school_id) }
end

と書くと

$ bundle exec rspec spec/models/person_spec.rb
Person
  should have FOREIGN KEY constraint on school_id

とテストできるようになります。

カスタムマッチャは

RSpec::Matchers.define :have_foreign_key_constraint_on do |field|
  match do |model|
    model.send("#{field}=", 0)
    begin
      model.save!(validate: false)
      false
    rescue ActiveRecord::InvalidForeignKey
      true
    end
  end

  description { "have FOREIGN KEY constraint on #{field}" }
  failure_message { "expected to have FOREIGN KEY constraint on #{field}, but not" }
end

となります。

以上、NOT NULL制約カスタムマッチャ, UNIQUE制約カスタムマッチャと一緒に使えるDB制約カスタムマッチャでした。

関連記事

  • このエントリーをはてなブックマークに追加
  • follow us in feedly