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が保存できないですが、エーラーも出て来なかった。なかなか原因を見つけられません。