0

ruby.railstutorial.org をフォローしています。いくつかのトラブルがありましたが、解決しました。しかし、今、私はかなり長い間グーグルでコードをチェックしており、テストが失敗する理由はわかっていますが、それを成功させる方法についての手がかりはありません.

では、ここで問題です。私はユーザーモデルを持っています:

class User < ActiveRecord::Base
  attr_accessible :email, :name

  validates :name, presence: true, length: {maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, format: { with: VALID_EMAIL_REGEX },
   uniqueness: { case_sensitive: false }
end

この問題は、大文字と小文字を区別しない一意性チェックに関連しています。Rspecでのテストは次のとおりです。

before { @user = User.new(name: "Example User", email: "user@example.com") }
subject { @user }

describe "when email address is already in use" do
    before do
        user_with_same_email = @user.dup
        user_with_same_email = @user.email.upcase
        user_with_same_email.save
    end

    it { should_not be_valid }
end

テスト エラー メッセージは次のとおりです。

Failures:
1) User when email address is already in use 
    Failure/Error: user_with_same_email.save
    NoMethodError:
    undefined method `save' for "USER@EXAMPLE.COM":String
# ./spec/models/user_spec.rb:53:in `block (3 levels) in <top (required)>'

したがって、モデルは保存に失敗します。そして、私は何をすべきかわかりません。ただし、テストから次の行をコメントアウトすると:

user_with_same_email = @user.email.upcase

{ case_sensitive: false }の部分をモデル コードから削除すると、テストはパスします。テストで実行したいのは、実際にuser_with_same_email変数を保存し、それが無効であることを報告することです。ヘルプ/リンク/提案は大歓迎です。

4

3 に答える 3