1

Rspec テストを実行しているときにこのエラーが発生し続け、その理由がわかりません。私はRails(およびプログラミング全般)にかなり慣れていないので、指示や助けをいただければ幸いです。

編集:誰かがそれをふるいにかけたり、エラーを再現したりしたい場合は、レポへのリンクを次に示します。 https://github.com/FluxAnimus/sample_app/tree/sign-up

Failures:

1) User pages profile page 
 Failure/Error: before { visit user_path(user) }
 ActionView::Template::Error:
   undefined method `downcase' for nil:NilClass
 # ./app/helpers/users_helper.rb:5:in `gravatar_for'
 # ./app/views/users/show.html.erb:3:in `_app_views_users_show_html_erb__1766857043046396980_38603940'
 # ./spec/requests/user_pages_spec.rb:9:in `block (3 levels) in <top (required)>'

2) User pages profile page 
 Failure/Error: before { visit user_path(user) }
 ActionView::Template::Error:
   undefined method `downcase' for nil:NilClass
 # ./app/helpers/users_helper.rb:5:in `gravatar_for'
 # ./app/views/users/show.html.erb:3:in `_app_views_users_show_html_erb__1766857043046396980_38603940'
 # ./spec/requests/user_pages_spec.rb:9:in `block (3 levels) in <top (required)>'

Finished in 0.46129 seconds
39 examples, 2 failures

Failed examples:

rspec ./spec/requests/user_pages_spec.rb:12 # User pages profile page 
rspec ./spec/requests/user_pages_spec.rb:11 # User pages profile page 

Ruby on Rails チュートリアルの 7.13 章にいます。Gravatar コードと FactoryGirls Gem を追加するまで、テストは問題なくクリアされました。

/app/helpers/users_helper.rb ファイル

module UsersHelper

  # Returns the Gravatar (http://gravatar.com/) for the given user.
  def gravatar_for(user)
    gravatar_id = Digest::MD5::hexdigest(user.email.downcase)
    gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}"
    image_tag(gravatar_url, alt: user.name, class: "gravatar")
  end
end

仕様/リクエスト/user_pages_spec.rb

require 'spec_helper'

describe "User pages" do

  subject { page }

  describe "profile page" do
    let(:user) { FactoryGirl.create(:user) }
    before { visit user_path(user) }

    it { should have_content(user.name) }
    it { should have_title(user.name) }
  end
.
.
.
end

そして最後の参照: app/views/users/show.html.erb

<% provide(:title, @user.name) %>
<h1>
  <%= gravatar_for @user %>
  <%= @user.name %> 
</h1>

ファクトリ ファイルは次のとおりです。

FactoryGirl.define do
  factory :user do
    name     "Michael Hartl"
    email    "michael@example.com"
    password "foobar"
    password_confirmation "foobar"
  end
end

app/controllers/users_controller.rb

class UsersController < ApplicationController

    def show
        @user = User.find(params[:id])
    end

    def new
    end
end
4

2 に答える 2

5

gravatar_forチュートリアルでの定義を使用していると仮定すると、定義されていることを意味するdowncaseのコンテキストでのみ参照されますが、 のメソッド/属性は を返します。また、スタック トレースで提供されるファイル名、メソッド、および行番号から、問題のあるコードを特定することもできます。user.email.downcaseuser emailusernil

更新: あなたのUserモデルではbefore_save、以下を含む呼び出しがありました:

self.email = email.downcase!

downcase!を返すので、これは に設定するnil効果があります。チュートリアルに従って、代わりに次のいずれかを使用できます。emailnil

self.email.downcase!

また:

self.email = email.downcase
于 2013-08-01T23:38:38.720 に答える