Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 Rspec测试在失败时验证通过的唯一性_Ruby On Rails 4_Rspec_Validates Uniqueness Of - Fatal编程技术网

Ruby on rails 4 Rspec测试在失败时验证通过的唯一性

Ruby on rails 4 Rspec测试在失败时验证通过的唯一性,ruby-on-rails-4,rspec,validates-uniqueness-of,Ruby On Rails 4,Rspec,Validates Uniqueness Of,我是Rspec测试的新手,这非常令人沮丧 我有一个模型,它使用validates\u university\u防止创建重复条目。(我知道这并不能保证,首选的方法是使用数据库级别的约束,但目前并不相关) 问题是,我的Rspec测试似乎表明可以在表中创建两个具有相同用户id和董事会id的条目,即使在实践中,在控制台和应用程序本身中,这是无法做到的 模特/主持人加入.rb class ModeratorJoin < ActiveRecord::Base belongs_to :user

我是Rspec测试的新手,这非常令人沮丧

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

问题是,我的Rspec测试似乎表明可以在表中创建两个具有相同用户id和董事会id的条目,即使在实践中,在控制台和应用程序本身中,这是无法做到的

模特/主持人加入.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
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)>'
故障:
1) 版主加入用户/板对必须是唯一的
失败/错误:预期(join2)。to\u无效
应为无效
#./spec/models/版主\u join\u spec.rb:39:in'block(3层)in'
我认为(现在无法检查自己)您的测试中没有执行
主题。试试这个变体

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

你说它在应该失败的时候通过了,但是你表现出失败?这让测试通过了!但我不知道为什么。。。我认为连接对象在“必须是唯一的”测试中是可见的,因为它是在开始时声明的。“可见”和“执行”是不同的事情<代码>主题
有“惰性”加载策略。如果未调用,则不会执行。想法是描述啊!当然我忘记了延迟加载。因此,另一个解决方案是使用let!而不是放任。非常感谢。