Hartl Chap。 8.2.1测试失败

时间:2013-02-12 21:36:51

标签: ruby-on-rails-3.2 railstutorial.org

世界上到底发生了什么?我的测试没有通过,在整个教程中我都非常小心(这一次)。请告诉我为什么弹出remember_token错误。

这是我的错误:     故障:

  1) User 
     Failure/Error: it { should respond_to(:remember_token) }
       expected #<User id: nil, name: "Example User", email: "user@example.com",   created_at: nil, updated_at: nil, password_digest:     "$2a$04$HUTzfhPB9eOgNaBIwQZn/.BpGt4h/v9wgLlo.UoMoh8Q..."> to respond to :remember_token
     # ./spec/models/user_spec.rb:28:in `block (2 levels) in <top (required)>'

Finished in 0.19682 seconds
22 examples, 1 failure

Failed examples:

rspec ./spec/models/user_spec.rb:28 # User 

这是我的代码:

分贝/迁移/ [时间戳] _add_remember_token_to_users.rb

class AddRememberTokenToUsers < ActiveRecord::Migration
  def change
    add_column :users, :remember_token, :string
    add_index  :users, :remember_token
  end
end

规格/模型/ user_spec.rb     需要'spec_helper'

describe User do

  before do
    @user = User.new(name: "Example User", email: "user@example.com", 
                     password: "foobar", password_confirmation: "foobar")
  end

  subject { @user }

  it { should respond_to(:name) }
  it { should respond_to(:email) }
  it { should respond_to(:password_digest) }
  it { should respond_to(:password) }
  it { should respond_to(:password_confirmation) }
  it { should respond_to(:remember_token) }
  it { should respond_to(:authenticate) }

  it { should be_valid }
  it { should respond_to(:authenticate) }
.
.
.  

3 个答案:

答案 0 :(得分:0)

我的猜测是你需要运行rake db:test:prepare。祝你好运!

答案 1 :(得分:0)

我遇到了一个非常类似的问题,我们覆盖了它here

总而言之,数据库出现了一些问题,所以我所做的就是删除表格,然后重新运行rake db:migraterake db:test:prepare

删除表格:

  • 打开SQLite数据库浏览器(本书前面的Hartl推荐的数据库浏览器)。
  • 从SQLite数据库浏览器中,打开sample_app / db / development.sqlite。
  • 删除(从SQLite数据库浏览器),删除schema_migrations表。
  • 我还必须删除schema.rb,这是我在终端上做的。

我确实尝试了这些步骤然后运行rake db:migrate,但遇到了另一个错误。然后我删除了整个users表(在SQLite数据库浏览器中),然后重新运行rake db:migrate并完成了所有操作。

在执行此操作之前备份。

答案 2 :(得分:0)

我今天也遇到了这个问题。 我不得不手动删除[timestamp] _add_remember_token_to_users.rb文件。 然后跑         bundle exec rake db:migrate         bundle exec rake db:test:prepare