Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.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 Rails在数据库关联表中对唯一性的测试_Ruby On Rails_Testing_Activerecord - Fatal编程技术网

Ruby on rails Rails在数据库关联表中对唯一性的测试

Ruby on rails Rails在数据库关联表中对唯一性的测试,ruby-on-rails,testing,activerecord,Ruby On Rails,Testing,Activerecord,每个用户都可以通过::active\u vote\u relationships为一篇文章投票,该文章由一个关联建模:每个用户都有\u many:voting。他们应该只被允许投票一次,所以我在模式中得到了unique:true: add_index "voterelationships", ["voter_id", "voted_id"], name: "index_voterelationships_on_voter_id_and_voted_id", unique: true, using

每个用户都可以通过::active\u vote\u relationships为一篇文章投票,该文章由一个关联建模:每个用户
都有\u many:voting。他们应该只被允许投票一次,所以我在模式中得到了
unique:true

add_index "voterelationships", ["voter_id", "voted_id"], name: "index_voterelationships_on_voter_id_and_voted_id", unique: true, using: :btree
我试图通过让用户投票给他已经投票支持的帖子来测试这一点:

test "shouldn't be able to vote again for a post already voted for" do
  assert_no_difference '@user.postvoting.count' do
    xhr :post, voterelationships_path(voter_callsign: @user.callsign, voted_id: @post_1.id)
  end
end
我期待着考试通过。相反,我得到了以下错误:

ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR:  duplicate key value violates unique constraint "index_voterelationships_on_voter_id_and_voted_id"

唯一性要求似乎正确地防止了表中的重复对,但为什么这会导致测试错误而不是通过?我以为第二次投票会被数据库拒绝。如何通过考试?

这是正常的。您应该使用
assert\u raises
来断言将引发
ActiveRecord::RecordNotUnique
异常

例如:

assert_raises ActiveRecord::RecordNotUnique do
  xhr :post, voterelationships_path(voter_callsign: @user.callsign, voted_id: @post_1.id)
end