0

应用程序/模型/zombie.rb

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

规格/模型/zombie_spec.rb

require 'spec_helper'

describe Zombie do

    it "is invalid without a name" do
        zombie = Zombie.new
        zombie.should_not be_valid
    end
end

错误

没有名字的僵尸是无效的(失败 - 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 # 没有名字的僵尸无效

随机种子 12906

4

4 回答 4

0

您不应该initialize在 ActiveRecord 类中定义方法。

当我定义了初始化方法时,出现了这个错误:

 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
于 2012-09-25T04:24:21.777 回答
0

您是否运行了 rake db: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 属性有错误

于 2012-10-06T23:42:18.143 回答
0

谢谢大家,我没有运行迁移,所以运行 rake db:migrate 修复了它

于 2012-10-08T00:40:09.097 回答
0

我也在学习本教程并且遇到了同样的问题。我进行了迁移,但仍然没有得到想要的结果。正如 arieljuod 提到的,跑步 $ rake db:test:load解决了这个问题。

于 2013-01-11T04:15:01.567 回答