【问题标题】:Validation Error in RSpec before(:each) block has weird behaviorRSpec before(:each) 块中的验证错误具有奇怪的行为
【发布时间】:2011-09-14 19:00:41
【问题描述】:

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

所以我在控制器规范中有一个 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 => "vacant") 的行。

感谢您的帮助。

【问题讨论】:

  • 你用Factory.model创建什么状态?
  • 旁注:“@models = 10.times.map { Factory(:model) }”或“@models = FactoryGirl.create_list(:model, 10)”
  • apneadiving,工厂使用相同的状态:“vacant”
  • 我这里也应该有一个类似的问题,但我的问题还是没有用那个解决方案解决,也没有解决,因为在这种情况下:stackoverflow.com/questions/2416381/…
  • - 托克兰;出于某种原因,这对我不起作用。我得到了未初始化的常量工厂女孩。工厂工作正常。我安装了 gem 'factory_girl_rails', '1.0'

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


【解决方案1】:

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

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

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

您不需要 :in =&gt; 进行包含验证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-25
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    相关资源
    最近更新 更多