gpt4 book ai didi

ruby-on-rails - 尽管尚未实现验证,但 Rails 教程测试通过

转载 作者:行者123 更新时间:2023-11-28 21:21:14 29 4
gpt4 key购买 nike

我正在学习 Michael Hartl 的 Rails 教程 (https://www.railstutorial.org/book/following_users#code-relationship_validations),我试图理解为什么我认为应该失败的测试正在通过。

我有一个Relationship 模型。它看起来像这样:

class Relationship < ApplicationRecord
belongs_to :follower, class_name: "User"
belongs_to :followed, class_name: "User"
# validates :follower_id, presence: true
# validates :followed_id, presence: true
end

我添加了以下测试:

require 'test_helper'

class RelationshipTest < ActiveSupport::TestCase

def setup
@relationship = Relationship.new(follower_id: users(:michael).id,
followed_id: users(:archer).id)
end

test "should be valid" do
assert @relationship.valid?
end

test "should require a follower_id" do
@relationship.follower_id = nil
assert_not @relationship.valid?
end

test "should require a followed_id" do
@relationship.followed_id = nil
assert_not @relationship.valid?
end
end

schema.rb 中的相关部分如下所示:

create_table "relationships", force: :cascade do |t|
t.integer "follower_id"
t.integer "followed_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["followed_id"], name: "index_relationships_on_followed_id"
t.index ["follower_id", "followed_id"], name: "index_relationships_on_follower_id_and_followed_id", unique: true
t.index ["follower_id"], name: "index_relationships_on_follower_id"
end

尽管已注释掉验证,但测试仍然通过。据我了解,最后两个断言应该会失败,因为没有验证可以防止任何一列被设置为 nil。为什么他们未经验证就通过了?是因为两列都有索引吗?

最佳答案

在rails 5中,belongs_to关联是默认需要的,你可以设置:optional选项为 true,但默认为 false。

我相信这个教程已经存在很多年了(我知道 Michael Hartl rails 教程已经存在了一段时间,我假设它是同一个),尽管它看起来像是至少为 rails 5.1.4 更新。将此类内容更新到较新版本时,有时会遗漏一些内容,我假设他们只是遗漏了这个引用,或者没有意识到 belongs_to 已更改(默认情况下它是可选的,你必须在那里进行验证)。他们也很可能只是更新了 Rails 版本并重新运行测试,发现一切仍然通过。

关于ruby-on-rails - 尽管尚未实现验证,但 Rails 教程测试通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51091104/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com