class Zombie < ActiveRecord::Base
attr_accessible :name
validates :name, presence: true
end
require 'spec_helper'
describe Zombie do
it "is invalid without a name" do
zombie = Zombie.new
zombie.should_not be_valid
end
end
僵尸 没有名字无效(FAILED - 1) 故障:
1) Zombie is invalid without a name Failure/Error: zombie.should_not be_valid ActiveRecord::StatementInvalid: Could not find table 'zombies' # ./spec/models/zombie_spec.rb:5:in `new' # ./spec/models/zombie_spec.rb:5:in `block (2 levels) in <top (required)>'
以0.02912秒结束 7个例子,1个失败
失败的例子:
rspec ./spec/models/zombie_spec.rb:4#Zombie没有名字无效
随机种子12906
答案 0 :(得分:0)
您不应该在ActiveRecord类中定义initialize
方法。
当我定义了initialize方法时,会出现此错误:
Failure/Error: zombie = Zombie.new
NoMethodError:
undefined method `delete' for nil:NilClass
没有它,它就像你期望的那样传递。
因此,请将您的模型更改为以下内容,您的规格将通过。
class Zombie < ActiveRecord::Base
attr_accessible :name
validates :name, presence: true
end
或者......如果您认为有必要,请务必先致电super
def initialize(options={})
super
self.name = options[:name]
end
答案 1 :(得分:0)
你运行rake db:test:load所以在测试数据库上加载了db的架构吗?
你的测试也不对,你正在测试你的模型是无效的,但你没有测试你的模型是无效的,因为它的名字不存在,你应该做类似的事情
it "is invalid without a name" do
zombie = Zombie.new
zombie.should_not be_valid
zombie.errors[:name].should_not be_blank
end
这样你真的知道name属性有错误
答案 2 :(得分:0)
谢谢大家,我没有运行迁移所以运行rake db:migrate修复它
答案 3 :(得分:0)
我也正在完成本教程并遇到同样的问题。我对迁移进行了调整,但仍未获得预期的结果。正如arieljuod所提到的,运行$ rake db:test:load
可以解决问题。