RSpec((每个)块之前的验证错误具有奇怪的行为

时间:2011-09-14 19:00:41

标签: ruby-on-rails ruby ruby-on-rails-3 testing rspec

修订:这里的错误是我在同一个哈希中存储了几个不同的模型。这是我构建数组的内部方式。无论如何,我为这里的错误道歉。我没有办法回答这个问题。

所以我在控制器规范中有一个RSpec before(:each)块。我的示例模型有一个状态字段和以下验证:

  class Model < ActiveRecord::Base
    STATI = [ "vacant", "deleted", "deactivated"]
    ...
    validates :status, :inclusion => { :in => STATI }
    ...
  end

在我的规范中,我有以下代码。

  describe Controller do
    ...
    describe "some methods" do
      before(:all) do
        @models = []
        10.times { @models << Factory(:model) }
      end
      before(:each) do
        @models.each { |m| m.update_attributes(:status => "vacant") }
      end
      ...
    end
  end

当我运行规范时,所有其他描述块运行正常。它会产生一个错误:       ActiveRecord的:: RecordInvalid:       验证失败:状态未包含在列表中 并指向m.update_attributes(:status =&gt;“vacant”)的行。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我会在您的模型定义中尝试以下内容:

class Model < ActiveRecord::Base
  STATI = %w[vacant deleted deactivated]
  ...
  validates :status, :inclusion => STATI
  ...
end

%w是创建字符串数组的首选语法,允许从数组定义中删除",

您不需要:in =>进行包含验证。