我在教自己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
答案 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
就是这样