LoginSignup
0
0

More than 5 years have passed since last update.

[RSpec] Validationの注意

Posted at

Userモデルでmailフィルドはユニークフィルドです。

class User
  include Mongoid::Document
  field :name
  field :mail
  validate :unique_mail

  def unique_mail
    # do something
  end
end

CompanyモデルでUserとhas_manyアソシエーションがあります。

class Company
  include Mongoid::Document
  field :name
  has_many :users
end

テストケース

let(:user) {create :user, name: "user", mail: "user@mail.com"}
let(:another_user) {create :user, name: "another user", mail: "user@mail.com"}
let(:company) {create :company}

context "when company has 2 users" do
  it "equal 2" do
    company.users = [user, another_user]
    expect(company.users).to eq 2
  end
end

Failureが出てきた

     Failure/Error: expect(company.users.count).to eq 2

       expected: 2
            got: 1

       (compared using ==)

もっと分析する
bindingを設定して、いくつかCmdを試します。

  it "equal 2" do
    company.users = [user, another_user]
    binding.pry
    expect(company.users).to eq 2
    end
  end
company.users.to_a
[#<User _id: 576f951e4e677507e1ff0000, created_at: 2016-06-26 08:41:02 UTC, updated_at: 2016-06-26 08:41:02 UTC, company_id: BSON::ObjectId('576f951e4e677507e1040100'), name: "user", mail: "user@mail.com">,
 #<User _id: 576f951e4e677507e17e0100, created_at: 2016-06-26 08:41:02 UTC, updated_at: 2016-06-26 08:41:02 UTC, company_id: BSON::ObjectId('576f951e4e677507e1040100'), name: "another user", mail: "user@mail.com">]

company.users.count
1

なんにこれ?
もっともっと分析してみます。

user = company.users.first
user.save 
#=> false
user.errros
# @messages={:メールは=>["別の顧客に使われています。"]}

これは原因です。
なぜならRSpecにUserが保存できないですが、エーラーも出て来なかった。なかなか原因を見つけられません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0