簡體   English   中英

為什么我不理解Rails從教程中驗證在線狀態?

[英]Why don't I understand the Rails validates presence from tutorial?

我正在關注Rails教程,我們創建了一個用戶模型,然后使用RSpec對其進行了測試。 在spec / model / user_spec.rb中,我們有:

require 'spec_helper'

describe User do

  before do
    @user = User.new(name: "Example User", email: "user@example.com")
  end

  subject { @user }

  it { should respond_to(:name) }
  it { should respond_to(:email) }
  it { should be_valid }

  describe "when name is not present" do
    before { @user.name = " " }
    it { should_not be_valid }
  end
end

運行測試時失敗。 當我們在用戶模型中添加以下內容時:

validates :name, presence: true

它通過了。 我明白那個。 我不明白的是它的用法:

describe "when name is not present" do
before { @user.name = " " }
it { should_not be_valid }
 end

驗證存在還不夠嗎?

編輯完之后,我想您是在問:“如果我們已經檢查過存在的name以驗證模型類中的記錄,為什么還要在測試中再次檢查它呢?” 一個簡單但不是很明確的答案是,第一部分是檢查用戶是否具有名稱,第二部分是測試您的應用程序在實際呈現給新用戶時是否執行此檢查。

validates :name行將檢查name屬性值是否存在; 如果不是,則在該模型類的實例上調用save方法時,Rails不會保存該記錄,並且它將生成一條錯誤消息。

規范正在測試以驗證是否嘗試為必須驗證的屬性( name )分配空白或nil值,Rails不會將其視為有效,從而防止其被保存並觸發錯誤消息。

有一種觀點認為,作為一種考驗,這是過分殺傷力的。 從某種意義上說,您只是在測試Rails內建的功能( validates方法)(預期已經在此處進行了測試)是否按預期工作。

另一方面,如果您首先編寫測試並使用它們來描述User模型的預期行為,則可以認為您正在測試與試圖創建無效User來確認其正常工作相關的應用程序行為。意。 我大體上同意后一種觀點。

以下行為User模型添加了一些驗證:

validates :name, presence: true

這告訴Rails必須存在name屬性,以使User模型的實例有效。 如果模型的實例無效,則無法保存...,通過這種方法可以防止保存無效記錄。

隨着教程的逐步進行,當您在表格中看到驗證錯誤時,這將變得更加有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM