1 rspec ruby-on-rails railstutorial.org
运行 Rspec 测试时,我不断收到此错误,但不知道为什么。我对 Rails(以及一般的编程)很陌生,所以任何方向或帮助将不胜感激!
编辑:如果有人想筛选它和/或复制错误,这是一个到 repo 的链接。 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
Run Code Online (Sandbox Code Playgroud)
我在 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
Run Code Online (Sandbox Code Playgroud)
规范/请求/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
Run Code Online (Sandbox Code Playgroud)
最后一个参考:app/views/users/show.html.erb
<% provide(:title, @user.name) %>
<h1>
<%= gravatar_for @user %>
<%= @user.name %>
</h1>
Run Code Online (Sandbox Code Playgroud)
这是工厂文件:
FactoryGirl.define do
factory :user do
name "Michael Hartl"
email "michael@example.com"
password "foobar"
password_confirmation "foobar"
end
end
Run Code Online (Sandbox Code Playgroud)
应用程序/控制器/users_controller.rb
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
def new
end
end
Run Code Online (Sandbox Code Playgroud)
假设您使用的gravatar_for是教程中的定义,downcase则仅在其上下文中被引用,user.email.downcase这意味着user 已定义,但返回的email方法/属性。您还可以通过堆栈跟踪中提供的文件名、方法和行号来识别有问题的代码。usernil
更新:在您的User模型中,您before_save接到了一个电话,其中包括以下内容:
self.email = email.downcase!
Run Code Online (Sandbox Code Playgroud)
由于downcase!返回nil,这具有设置email为的效果nil。根据教程,您可以使用以下任一方法:
self.email.downcase!
Run Code Online (Sandbox Code Playgroud)
或者:
self.email = email.downcase
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8113 次 |
| 最近记录: |