1

Railsチュートリアルを閲覧して、ユーザーアカウントをまとめて、作業中のプロジェクトのテストを実行しています。

Failures:

  1) when email format is invalid should be invalid
     Failure/Error: @user.email = invalid_address
     NoMethodError:
       undefined method `email=' for nil:NilClass
     # ./spec/models/user_spec.rb:71:in `block (3 levels) in <top (required)>'
     # ./spec/models/user_spec.rb:70:in `each'
     # ./spec/models/user_spec.rb:70:in `block (2 levels) in <top (required)>'

  2) when email format is valid should be valid
     Failure/Error: @user.email = valid_address
     NoMethodError:
       undefined method `email=' for nil:NilClass
     # ./spec/models/user_spec.rb:81:in `block (3 levels) in <top (required)>'
     # ./spec/models/user_spec.rb:80:in `each'
     # ./spec/models/user_spec.rb:80:in `block (2 levels) in <top (required)>'

Finished in 0.527 seconds
9 examples, 2 failures

Failed examples:

rspec ./spec/models/user_spec.rb:67 # when email format is invalid should be invalid
rspec ./spec/models/user_spec.rb:78 # when email format is valid should be valid

何が問題なのかわかりません。内容はわかりますが、チュートリアルのコードを C&P して、すべてが適切に入力されていることを確認するために行ったことを再確認しています。

これが user_spec ファイルです。

https://gist.github.com/pwz2k/4770845

これが user.rb ファイルです。

https://gist.github.com/pwz2k/4770854

メール検証を追加するまで、失敗は表示されませんでした。

4

2 に答える 2

0

エラーは非常に明確です。電子メールを nil クラスに設定しています。つまり、私たちが言うユーザーに電子メールを設定することになっています

 @user.email = "something"

エラーは、ユーザーがいないことを訴えており、ユーザーの電子メールはありません。

To make is work here は、この問題を解決するのに役立つサンプル コードです。

 describe "validations" do
   before(:each) do
     @user = User.new(name: "gates", email: "somename@gmail.com")
   end
   it "should be invalid" do
     invalid_emails = %w{gs@gmail p.com name.gmail.com foo.ymail}
     invalid_emails.each do |invalid_email|
       @user.email = invalid_email
       expect(@user.email).to_not be_valid
    end
   end

   it "should be valid" do
    @user.name = "somename"
    valid_emails = %w{user@foo.COM A_US-ER@f.b.org frst.lst@foo.jp 
    a+b@baz.cn}
    valid_emails.each do |valid_email|
     @user.email = valid_email
     expect(@user.email).to be_valid
    end
   end  
 end

フィクスチャ フォルダにユーザー用のフィクスチャが作成されていることを確認してください。

お役に立てれば!

于 2015-01-28T06:10:39.463 に答える
0

テストを開始する前に @user を作成していることを確認してください.. User テストにこれらの行がありますか? ( Rails チュートリアルのリスト 6.16 )

before do
    @user = User.new(name: "Example User", email: "user@example.com")
end
于 2013-02-12T17:04:35.707 に答える