0

私はRspecテストにかなり慣れていないので、これは非常にイライラします。

validates_uniqueness_ofを使用して重複するエントリが作成されないようにするモデルがあります。(これは保証されておらず、推奨される方法はデータベース レベルの制約を使用することですが、現時点では関係ありません)。

問題は、実際にはコンソールとアプリ自体でこれを行うことはできませんが、私の Rspec テストでは、同じ user_id と board_id を持つテーブルに 2 つのエントリを作成できることが示されているようです。

models/moderator_join.rb

class ModeratorJoin < ActiveRecord::Base
  belongs_to :user
  belongs_to :board

  validates :user_id, presence: true
  validates :board_id, presence: true

  validates_uniqueness_of :user_id, scope: :board_id, message: "is already a moderator of that board."
end

仕様/モデル/moderator_join_spec.rb

describe ModeratorJoin do
  let(:user) { create(:user) } // Create with FactoryGirl
  let(:board) { create(:board) } // Create with FactoryGirl
  let(:join) { ModeratorJoin.create(user: user, board: board) }

  subject { join }

  it { should be_valid } // Test passes 
  its(:id) { should_not eq nil } // Test passes
  its(:user) { should eq user } // Test passes
  its(:board) { should eq board } // Test passes

  describe "user/board pairs" do
    let(:join2) { ModeratorJoin.new(user: user, board: board) }

    it "must be unique" do
        expect(join2).to_not be_valid // TEST FAILS
    end
  end
end 

コンソール出力

Failures:
1) ModeratorJoin user/board pairs must be unique
Failure/Error: expect(join2).to_not be_valid
expected #<ModeratorJoin id: nil, user_id: 121, board_id: 1, created_at: nil, updated_at: nil> not to be valid

 # ./spec/models/moderator_join_spec.rb:39:in `block (3 levels) in <top (required)>'
4

1 に答える 1