簡體   English   中英

Rails,RSpec單元測試的用戶名失敗

[英]Rails, RSpec unit test failing for username

總共n00b個。 我試圖弄清楚如何為我的用戶模型編寫單元測試。 目前我的4項測試都失敗了,我真費勁地弄清楚原因。

第一條失敗是針對這條線...

it { should validate_uniqueness_of(:username) }因Rails響應而失敗...

1) User should require case sensitive unique value for username
     Failure/Error: it { should validate_uniqueness_of(:username) }

     ActiveRecord::StatementInvalid:
       PG::NotNullViolation: ERROR:  null value in column "seeking_coach" violates not-null constraint
       DETAIL:  Failing row contains (1, , , , , a, , , , , null, null, null, null, null, null, 0, null, null, null, null, 2016-10-30 19:17:07.366431, 2016-10-30 19:17:07.366431, f, null, null, null).
       : INSERT INTO "users" ("username", "created_at", "updated_at") VALUES ($1, $2, $3) RETURNING "id"

為什么在先前的單元測試( it { should have_valid(:username).when('Groucho', 'Marx')} )通過時it { should have_valid(:username).when('Groucho', 'Marx')}單元測試it { should have_valid(:username).when('Groucho', 'Marx')}由於空字段而失敗?

規格/型號/user_spec.rb

  it { should have_valid(:username).when('Groucho', 'Marx')}
  it { should_not have_valid(:username).when(nil, '')}
  it { should validate_uniqueness_of(:username) }

型號/user.rb

  validates :username, uniqueness: true, presence: true
  validates_format_of :username, with: /\A[a-zA-Z0-9]+\z/

好的,已經閱讀了一下,看來當在另一列上使用NOT NULL數據庫約束進行唯一性測試時,對於某些邊緣情況,這實際上可能是與shoulda匹配器相關的錯誤。

https://github.com/thoughtbot/shoulda-matchers/issues/600

作為一種解決方法,我建議您顯式設置一個有效的模型,並允許shoulda匹配器在要測試的屬性上做自己的事情。 您可以這樣設置所有匹配器應使用的主題:

describe User do
  subject { User.new(
    username: 'username',
    seeking_coach: 'coach',
    #
    # set other valid attributes here
    #
  )}

  it { should have_valid(:username).when('Groucho', 'Marx')}
  it { should_not have_valid(:username).when(nil, '')}
  it { should validate_uniqueness_of(:username) }
end

當然,如果您使用的是FactoryGirl,並且擁有可以建立有效用戶的用戶工廠,則可以簡單地使用:

subject { FactoryGirl.build(:user) }

現在,所有的Shoulda Matcher測試都將使用該對象來運行測試,並且您不應該為未測試的屬性遇到數據庫約束問題。

暫無
暫無

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

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