Rspec 存在验证在 Rails 5 中不起作用

Rspec for presence validation not working in Rails 5

待办事项模型

class Todo < ApplicationRecord
  has_many :items, dependent: :destroy
  validates :title, :created_by, presence: true
end

R规格

require 'rails_helper'

RSpec.describe Todo, type: :model do
  it { should have_many(:items).dependent(:destroy) }
  it { should validate_presence_of(:title) }
  it { should validate_presence_of(:created_by) }
end

当我 运行 命令 bundle exec rspec 时,我看到:

Finished in 1.82 seconds (files took 0.97238 seconds to load)
5 examples, 2 failures

Failed examples:

rspec ./spec/models/todo_spec.rb:8 # Todo should validate that :title cannot be empty/falsy
rspec ./spec/models/todo_spec.rb:9 # Todo should validate that :created_by cannot be empty/falsy

谁能解释为什么会失败?

这是 shoulda-matchers 中的问题。您需要添加到您的 spec_helper.rb:

RSpec.configure do |config|
  config.include(Shoulda::Matchers::ActiveModel, type: :model)
  config.include(Shoulda::Matchers::ActiveRecord, type: :model)
end