rspec用户测试给出“未定义的局部变量或方法”confirm_at“ [英] rspec user test gives "undefined local variable or method `confirmed_at' "

查看:212
本文介绍了rspec用户测试给出“未定义的局部变量或方法”confirm_at“的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的rspec测试给了我

my rspec test is giving me

 NameError:
   undefined local variable or method `confirmed_at' for #<User:0xca6ff98>

我的用户规格是:

require 'spec_helper'

describe User do

    before(:each) do
      @user = Factory(:user)
    end
    # Factory will make sure that in the future if attributes are added the tests below don't break
    # Just as long as the Factory is updated for the new attributes as appropriate.

    context "email is null" do
      it "record is invalid " do
        @user.name = nil
        @user.should_not be_valid
      end
    end

    context "email is unique" do
      it "record is valid " do
        @user2 = Factory(:user)
        @user2 = @user.email
        @user2.should_not be_valid 
      end
    end

end 

我找不到任何参考confirm_at

I can't find any reference to confirmed_at

我有设计1.4.8
我的用户迁移是:

I have devise 1.4.8 My user migration was:

class DeviseCreateUsers < ActiveRecord::Migration
  def self.up
    create_table(:users) do |t|
      t.database_authenticatable :null => false
      t.recoverable
      t.rememberable
      t.trackable

      # t.encryptable
      # t.confirmable
      # t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both
      # t.token_authenticatable


      t.timestamps
    end

    add_index :users, :email,                :unique => true
    add_index :users, :reset_password_token, :unique => true
    # add_index :users, :confirmation_token,   :unique => true
    # add_index :users, :unlock_token,         :unique => true
    # add_index :users, :authentication_token, :unique => true
  end

  def self.down
    drop_table :users
  end
end

我的用户表为:

mysql> describe users;
+------------------------+--------------+------+-----+---------+----------------+
| Field                  | Type         | Null | Key | Default | Extra          |
+------------------------+--------------+------+-----+---------+----------------+
| id                     | int(11)      | NO   | PRI | NULL    | auto_increment |
| email                  | varchar(255) | NO   | UNI |         |                |
| encrypted_password     | varchar(128) | NO   |     |         |                |
| reset_password_token   | varchar(255) | YES  | UNI | NULL    |                |
| reset_password_sent_at | datetime     | YES  |     | NULL    |                |
| remember_created_at    | datetime     | YES  |     | NULL    |                |
| sign_in_count          | int(11)      | YES  |     | 0       |                |
| current_sign_in_at     | datetime     | YES  |     | NULL    |                |
| last_sign_in_at        | datetime     | YES  |     | NULL    |                |
| current_sign_in_ip     | varchar(255) | YES  |     | NULL    |                |
| last_sign_in_ip        | varchar(255) | YES  |     | NULL    |                |
| created_at             | datetime     | YES  |     | NULL    |                |
| updated_at             | datetime     | YES  |     | NULL    |                |
| last_name              | varchar(255) | YES  |     | NULL    |                |
| first_name             | varchar(255) | YES  |     | NULL    |                |
+------------------------+--------------+------+-----+---------+----------------+


推荐答案

看起来你错过了Devise的可确认配置。您可以自己添加三个缺少的列,或尝试这样做(参见Reza.Hashemi在这个线程

Looks like you missed the "confirmable" configuration for Devise somewhere along the way. You can add the three missing columns yourself or try something like this (see Reza.Hashemi's message near the bottom of this thread:

$ rails g migration addconfirmable

然后编辑迁移到此:

def self.up 
  change_table(:users) do |t| 
    t.confirmable 
  end 
end 

最后,通常情况:

$ rake db:migrate

我认为上述过程应该添加三列:

I think the above process should add your three columns:


  • confirmation_at:datetime

  • confirmation_token:string

  • confirmation_sent_at:datetime

  • confirmed_at :datetime
  • confirmation_token :string
  • confirmation_sent_at :datetime

或者你可以用手做。

这篇关于rspec用户测试给出“未定义的局部变量或方法”confirm_at“的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆