所以我正在研究Ruby on Rails 3教程。我目前正在使用工厂测试用户显示页面的第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
答案 0 :(得分:1)
我发现了我的问题。它与FactoryGirl无关。问题出在我的用户模型(user.rb)中,导致问题的行是
before_save { |user| user.email = user.email.downcase! }
在downcase之后的爆炸导致电子邮件地址自返回以来被保存为nil!没有。一旦我删除它并使该行看起来像以下它工作得很好。
before_save { |user| user.email = user.email.downcase }
我发现它的方式是在测试环境中加载rails控制台并尝试创建一个新用户。我注意到一切都很好,但电子邮件是空的。
答案 1 :(得分:0)