首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails教程:第6章中未定义的方法错误

Rails教程:第6章中未定义的方法错误
EN

Stack Overflow用户
提问于 2017-03-31 06:29:35
回答 1查看 533关注 0票数 1

我目前正在编写Hartl教程users的6.3.1版

在运行rails test之后,我会遇到以下故障--我肯定是误解了指令或什么的。我很感激你对我做错了什么的洞察力:

代码语言:javascript
复制
Error:
UserTest#test_should_be_valid:
NoMethodError: undefined method `valid?' for nil:NilClass
    test/models/user_test.rb:15:in `block in <class:UserTest>'

Error:
UserTest#test_email_should_be_present:
NoMethodError: undefined method `email=' for nil:NilClass
    test/models/user_test.rb:24:in `block in <class:UserTest>'

Error:
UserTest#test_email_addresses_should_be_saved_as_lower-case:
NoMethodError: undefined method `email=' for nil:NilClass
    test/models/user_test.rb:46:in `block in <class:UserTest>'

/test/model/user_test.rb

代码语言:javascript
复制
require 'test_helper'

class UserTest < ActiveSupport::TestCase

  def setup
    def setup
      @user = User.new(name: "Example User", email: "user@example.com",
                       password: "foobar", password_confirmation: "foobar")

    end

  end

  test "should be valid" do
    assert @user.valid?
  end

  test "name should be present" do
    @user.name = "a" * 51
    assert_not @user.valid?
  end

  test "email should be present" do
    @user.email = "a" * 244 + "@example.com"
    assert_not @user.valid?
  end

  test "email validation should accept valid adresses" do
    valid_adresses = %w[user@example.com USER@foo.COM A_US_ER@foo.bar.org
                        first.last@foo.jp alice+bob@baz.cn]
    valid_adresses.each do |valid_adresses|
      @user.email = valid_adresses
      assert @user.valid?, "#{valid_adresses.inspect} should be valid"
    end
  end

  test "email adresses should be unique" do
    duplicate_user = @user.dup
    duplicate_user.email = @user.email.upcase
    @user.save
    assert_not duplicate_user.valid?
  end

  test "email addresses should be saved as lower-case" do
    mixed_case_email = "Foo@ExAMPle.CoM"
    @user.email = mixed_case_email
    @user.save
    assert_equal mixed_case_email.downcase, @user.reload.email
  end
end

/app/model/user.rb

代码语言:javascript
复制
class User < ApplicationRecord
  before_save { self.email = email.downcase }
  validates :name, presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i
  validates :email, presence: true, length: { maximum: 255 },
                    format: { with: VALID_EMAIL_REGEX },
                    uniqueness: { case_sensitive: false}
has_secure_password

end

Gemfile

代码语言:javascript
复制
source 'https://rubygems.org'

gem 'rails',        '5.0.2'
gem 'bcrypt-ruby', '~> 3.0.0'
gem 'bcrypt', git: 'https://github.com/codahale/bcrypt-ruby.git', :require => 'bcrypt'
gem 'puma',         '3.4.0'
gem 'sass-rails',   '5.0.6'
gem 'bootstrap-sass', '3.3.6'
gem 'uglifier',     '3.0.0'
gem 'coffee-rails', '4.2.1'
gem 'jquery-rails', '4.1.1'
gem 'turbolinks',   '5.0.1'
gem 'coffee-script-source', '1.8.0'
gem 'jbuilder',     '2.4.1'

group :development, :test do
  gem 'sqlite3', '1.3.12'
  gem 'byebug',  '9.0.0', platform: :mri
end

group :development do
  gem 'web-console',           '3.1.1'
  gem 'listen',                '3.0.8'
  gem 'spring',                '1.7.2'
  gem 'spring-watcher-listen', '2.0.0'
end

group :test do
  gem 'rails-controller-testing', '0.1.1'
  gem 'minitest-reporters',       '1.1.9'
  gem 'guard',                    '2.13.0'
  gem 'guard-minitest',           '2.4.4'
end

group :production do
  gem 'pg', '0.18.4'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-31 06:53:31

根据您的岗位设置方法,您错误定义了

1)编写def setup,并在其中再次写入def setup

2)检查测试数据库,做好测试数据库准备。

你的代码:

代码语言:javascript
复制
def setup
  def setup
    @user = User.new(name: "Example User", email: "user@example.com",
                       password: "foobar", password_confirmation: "foobar")
    end   
end

请在下面试试

代码语言:javascript
复制
require 'test_helper'

class UserTest < ActiveSupport::TestCase
   setup do
     @user = User.new(name: "Example User", email: "user@example.com",
                      password: "foobar", password_confirmation: "foobar")
   end

   ...
 end
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43133881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档