lib/rspec/rails/matchers/be_valid.rb
module RSpec module Rails module Matchers # @private class BeValid < RSpec::Matchers::BuiltIn::Be def initialize(*args) @args = args end def matches?(actual) @actual = actual actual.valid?(*@args) end def failure_message message = "expected #{actual.inspect} to be valid" if actual.respond_to?(:errors) && actual.method(:errors).arity < 1 errors = if actual.errors.respond_to?(:full_messages) actual.errors.full_messages else actual.errors end message << ", but got errors: #{errors.map(&:to_s).join(', ')}" end message end def failure_message_when_negated "expected #{actual.inspect} not to be valid" end end # @api public # Passes if the given model instance's `valid?` method is true, meaning # all of the `ActiveModel::Validations` passed and no errors exist. If a # message is not given, a default message is shown listing each error. # # @example # thing = Thing.new # expect(thing).to be_valid def be_valid(*args) BeValid.new(*args) end end end end