1

だから私はRubyonRails3チュートリアルを進めています。私は現在、セクション7.1.3ファクトリを使用したユーザーショーページのテストを行っています。

コードは機能しており、適切なGravatarイメージを取得しますが、テストの実行時にエラーが発生し続けます。

エラーは次のとおりです。

Failure/Error: before { visit user_path(user) }
     ActionView::Template::Error:
       undefined method `downcase' for nil:NilClass

show.html.erbファイルのコードは次のとおりです。

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

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

これがfactories.rbファイルからのコードです:

FactoryGirl.define do
  factory :user do
    name "Curtis Test"
    email "test@gmail.com"
    password "foobar"
    password_confirmation "foobar"
  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_selector('h1', text: user.name) }
    it { should have_selector('title', text: user.name) }
  end

  describe "signup page" do
    before { visit signup_path }
    it { should have_selector('title', text: full_title('Sign Up')) }
  end
end
4

2 に答える 2

1

私は自分の問題を発見しました。FactoryGirlとは何の関係もありませんでした。問題は私のユーザーモデル(user.rb)にあり、問題の原因となった行は

  before_save { |user| user.email = user.email.downcase! }

ダウンケースの後の強打により、ダウンケースが戻ってからメールアドレスがnilとして保存されていました。ゼロです。それを削除して、次のような行にすると、問題なく動作しました。

  before_save { |user| user.email = user.email.downcase }

私が見つけた方法は、テスト環境でRailsコンソールをロードし、新しいユーザーを作成しようとしたことです。私はすべてが大丈夫であることに気づきましたが、電子メールはnullでした。

于 2012-09-28T01:35:38.503 に答える
0

一般に、 Railsチュートリアルのサンプルアプリリファレンス実装を参照することで、このような問題をデバッグできます。

于 2012-09-20T18:47:36.597 に答える