在我的代码中,我对Shoulda matchers进行了以下验证,效果很好:

it { should validate_presence_of(:name) }

在我的模型中,我在验证中添加了以下条件:

validates_presence_of :name, :if => eligible?

有可能在验证中反映出来吗?

我试着寻找documentation个shoulda matchers,但没有找到解决方案.

非常感谢!

推荐答案

似乎不应该让matchers这么做,但自己写就足够容易了:

  context "if eligible" do
    before { allow(subject).to receive(:eligible?).and_return(true) }
    it { should validate_presence_of(:name) }
  end

  context "if ineligible" do
    before { allow(subject).to receive(:eligible?).and_return(false) }
    it { should_not validate_presence_of(:name) }
  end

Ruby-on-rails相关问答推荐

在数组中定位不匹配的索引

如何控制或定制S为模型使用的命名路由Rail()?

RubyOnRail在测试环境中启动失败

使用ActiveSupport::TimeWithZone将UTC转换为用户定义的时区

关于关联 has_many 的多级/三重嵌套形式

序列化来自关联的不可变数据是个好主意吗?

在 Rails 3 中,如何在路由中使用锚点作为 ID?

向现有控制器添加操作(Ruby on Rails)

从 Rails 模型内部访问翻译文件 (i18n)

使用 jQuery 在 Rails 中不显眼的动态表单字段

使用回形针使用 Activeadmin Rails 上传文件

counter_cache 实现的问题

从 ActiveRecord 对象中提取两个属性的快捷方式?

如何打印出范围之间的随机数?

submit_tag rails 表单中的 bootstrap 图标

从任何编码强制字符串为 UTF-8

以最Ruby 风格计算 ActiveSupport:TimeWithZone 天数的差异?

如何设置 MiniTest?

Rails:为什么 with_exclusive_scope 受保护?关于如何使用它的任何好的做法?

没有路由匹配缺少必需的键:[:id]