RSpec模型测试:失败

时间:2014-11-05 09:23:57

标签: ruby-on-rails-4 rspec rspec-rails rspec3

我在教自己RSpec(v3.1.7)。我已将rails g rspec:install的rspec安装到现有的rails应用程序中 - 刚刚创建。

我创建了一个模型:rails g rspec:model zombie。迁移过程一切顺利。

在:app / models / zombie.rb:

class Zombie < ActiveRecord::Base
   validates :name, presence: true
end  

在:app / spec / models / zombie_spec.rb:

require 'rails_helper'

RSpec.describe Zombie, :type => :model do
  it 'is invalid without a name' do
    zombie = Zombie.new
    zombie.should_not be_valid
  end  
end

在我运行的终端(在app目录中):rspec spec/models我得到了:

F

Failures:

1) Zombie is invalid without a name
 Failure/Error: zombie.should_not be_valid
 NoMethodError:
   undefined method `name' for #<Zombie id: nil, created_at: nil, updated_at: nil>
 # ./spec/models/zombie_spec.rb:6:in `block (2 levels) in <top (required)>'

我正在关注视频教程,然后我将视频(使用RSpec测试)跟到后者。我喜欢在第2章减肥。我错过了什么吗?该视频是否使用较旧版本的rspec作为视频教程?

在我的迁移文件中:

class CreateZombies < ActiveRecord::Migration
  def change
     create_table :zombies do |t|

      t.timestamps
     end
  end
end

2 个答案:

答案 0 :(得分:0)

您的模型不知道name是什么,因为您没有在迁移中定义属性:

class CreateZombies < ActiveRecord::Migration
  def change
     create_table :zombies do |t|
      t.string :name
      t.timestamps
     end
  end
end

然后运行:

rake db:migrate

然后这应该可以正常工作:

z = Zombie.new(name: 'foo')
z.name
 => 'foo'

答案 1 :(得分:0)

我认为你缺少name属性。以下迁移文件将为zombie model添加name属性:

class AddNameToZombies < ActiveRecord::Migration
  def change
    add_column :zombies, :name, :string
  end
end

最后运行以下命令:

rake db:migrate

rake db:test:prepare

就是这样