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変数を保存し、それが無効であることを報告することです。ヘルプ/リンク/提案は大歓迎です。