1

User モデルの一意性をテストしたいと思います。

私のUserモデルクラスは次のようになります:

class User
  include Mongoid::Document
  field :email, type: String
  embeds_one :details

  validates :email,
      presence: true,
      uniqueness: true,
      format: {
        with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z0-9]{2,})\Z/i,
        on: :create
      },
      length: { in: 6..50 }

end

モデルに属する私の rspec テストは次のようになります。

...
before(:each) do
  FactoryGirl.create(:user, email: taken_mail)
end

it "with an already used email" do
  expect(FactoryGirl.create(:user, email: taken_mail)).to_not be_valid
end

実行bundle exec rspecした後、成功して渡されるのではなく、常に次のエラーが発生します。

Failure/Error: expect(FactoryGirl.create(:user, email: taken_mail)).to_not be_valid
     Mongoid::Errors::Validations:

       Problem:
         Validation of User failed.
       Summary:
         The following errors were found: Email is already taken
       Resolution:
         Try persisting the document with valid data or remove the validations.

これを使用すると、成功します。

it { should validate_uniqueness_of(:email) }

を使用したいと思いますexpect(...)。誰でも私を助けることができますか?

4

1 に答える 1