validates_uniqueness_of的Rspec测试在应该失败时通过



我对Rspec测试还很陌生,这非常令人沮丧。

我有一个模型,它使用validates_uniqueness_of来防止创建重复条目。(我知道这并不能保证,首选的方法是使用数据库级别的约束,但目前这并不相关)。

问题是,我的Rspec测试似乎表明,可以在表中创建两个具有相同user_id和board_id的条目,尽管在实践中,在控制台和应用程序本身中,这是无法做到的。

型号/主持人_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

规格/型号/调节器_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)>'

我认为(现在不能检查自己)subject没有在您的测试中执行。试试这个变体

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

相关内容

  • 没有找到相关文章

最新更新