ruby-on-rails - Factory-girl 创建绕过我的模型验证

标签 ruby-on-rails ruby-on-rails-3 rspec factory-bot rspec-rails

我正在使用 Factory Girl 在我的模型/单元测试中为一个组创建两个实例。我正在测试模型以检查对 .current 的调用是否根据到期属性仅返回“当前”组,如下所示...

  describe ".current" do
    let!(:current_group) { FactoryGirl.create(:group, :expiry => Time.now + 1.week) }
    let!(:expired_group) { FactoryGirl.create(:group, :expiry => Time.now - 3.days) }

    specify { Group.current.should == [current_group] }
  end

我的问题是,我在模型中进行了验证,检查新组的到期日期是否在今天之后。这会引发下面的验证失败。

  1) Group.current 
     Failure/Error: let!(:expired_group) { FactoryGirl.create(:group, :expiry => Time.now - 3.days) }
     ActiveRecord::RecordInvalid:
       Validation failed: Expiry is before todays date

有没有办法强制创建组或在使用 Factory Girl 创建时绕过验证?

最佳答案

这对于 FactoryGirl 来说并不是很具体,但在通过 save(validate: false) 保存模型时,您始终可以绕过验证:

describe ".current" do
  let!(:current_group) { FactoryGirl.create(:group) }

  let!(:old_group) do
    g = FactoryGirl.build(:group, expiry: Time.now - 3.days)
    g.save(validate: false)
    g
 end
      
 specify { Group.current.should == [current_group] }
end

关于ruby-on-rails - Factory-girl 创建绕过我的模型验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9322353/

相关文章:

mysql - 如何将 mysql 数据库文件连接到本地 ruby​​ on rails 应用程序

ruby-on-rails - NameError: 未初始化的常量 Capybara::Webkit.configure

ruby-on-rails - 当命名间距模型。包含文件夹的名称应该是复数形式吗?

ruby-on-rails - 为触发邮件程序的观察者编写规范

ruby-on-rails - ActiveAdmin,现有(但裸露的)用户模型中的设计 2 不起作用

jquery - Rails - AJAX 模式对话框?

ruby-on-rails - 在 Ruby on Rails 中复制父记录和关联子记录的最佳方法?

ruby-on-rails - 如何计算对象中字符串的出现次数

ruby - 使用 Rack::Test 使用 RSpec 测试 session 变量

ruby-on-rails - RSPEC 测试 Controller 渲染 View ?