rspec用户测试给出“未定义的局部变量或方法”confirm_at“ [英] rspec user test gives "undefined local variable or method `confirmed_at' "
本文介绍了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屋!
查看全文