Ruby on rails 为什么这在Rspec zombie中不起作用。应该\u无效吗 app/models/zombie.rb 错误
僵尸 没有名称无效(失败-1) 失败:Ruby on rails 为什么这在Rspec zombie中不起作用。应该\u无效吗 app/models/zombie.rb 错误,ruby-on-rails,rspec,Ruby On Rails,Rspec,僵尸 没有名称无效(失败-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_s
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)>'
1)没有名称的僵尸无效
失败/错误:zombie.should\u无效
ActiveRecord::语句无效:
找不到表“僵尸”
#./spec/models/zombie_spec.rb:5:in'new'
#./spec/models/zombie_spec.rb:5:in'block(2层)in'
以0.02912秒完成
7例,1例失败
失败的示例:
rspec./spec/models/zombie_spec.rb:4#没有名称的zombie无效
随机化种子12906
您不应该在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
您是否运行了rakedb:test:load,以便在测试数据库上加载数据库的模式 此外,您的测试不正确,您正在测试您的模型是否无效,但您没有测试您的模型是否无效,因为它的名称不存在,您应该执行以下操作
it "is invalid without a name" do
zombie = Zombie.new
zombie.should_not be_valid
zombie.errors[:name].should_not be_blank
end
这样,您就知道name属性有一个错误了谢谢大家,我没有运行迁移,所以运行rake db:migrate修复了它我也在学习本教程,遇到了同样的问题。我尝试了迁移,但仍然没有得到预期的结果。正如arieljuod提到的,运行
$rake db:test:load
可以解决这个问题。您会收到什么错误消息?另外,如果:name是zombies数据库表中的一列,您不应该需要initialize方法定义的attr\u accessor行。等效功能将作为ActiveRecord的一部分提供。您是否已运行迁移来创建zombies表?
class Zombie < ActiveRecord::Base
attr_accessible :name
validates :name, presence: true
end
def initialize(options={})
super
self.name = options[:name]
end
it "is invalid without a name" do
zombie = Zombie.new
zombie.should_not be_valid
zombie.errors[:name].should_not be_blank
end