Тестирование Rails пройдено успешно, несмотря на то, что проверки еще не реализованы - PullRequest
0 голосов
/ 28 июня 2018

Я следую учебному пособию Майкла Хартла по 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

Несмотря на закомментированные проверки, тест все равно проходит. Насколько я понимаю, последние два утверждения должны потерпеть неудачу, так как нет никаких проверок, чтобы предотвратить установку любого столбца на ноль. Почему они проходят без проверок? Это потому, что в обоих столбцах есть индекс?

1 Ответ

0 голосов
/ 29 июня 2018

В рельсах 5 по умолчанию требуется ассоциация belongs_to, для нее можно установить для параметра :optional значение true, но по умолчанию установлено значение false.

Я полагаю, что этот учебник существует уже много лет (я знаю, a Учебное пособие по рельсам Михаэля Хартла существует уже некоторое время, я бы предположил, что это тот же самый), хотя похоже, что оно было обновлено по крайней мере, для рельсов 5.1.4. При обновлении таких вещей до более новых версий иногда что-то пропускается, и я предполагаю, что они просто пропустили эту ссылку или не поняли, что belongs_to изменилось (раньше это было необязательным по умолчанию, и вы должны были иметь проверки там). Также очень вероятно, что они просто обновили версию rails, повторно провели тесты и увидели, что все еще проходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...