Making tests easy on the fingers and eyes

Critical or Security advisories for 2.8.0

This version doesn't have any advisory. Want to report one?

Changelog for 2.8.0

  • ensure_length_of has been renamed to validate_length_of. ensure_length_of is deprecated and will be removed in 3.0.0.

  • set_the_flash has been renamed to set_flash. set_the_flash is deprecated and will be removed in 3.0.0.

  • set_session(:foo) is deprecated in favor of set_session[:foo]. set_session(:foo) will be invalid syntax in 3.0.0.

  • Using should set_session[:key].to(nil) to assert that that a value has not been set is deprecated. Please use should_not set_session[:key] instead. In 3.0.0, should set_session[:key].to(nil) will only pass if the value is truly nil.

Bug fixes

  • Fix delegate_method so that it works again with shoulda-context. (#591)

  • Fix validate_uniqueness_of when used with scoped_to so that when one of the scope attributes is a polymorphic *_type attribute and the model has another validation on the same attribute, the matcher does not fail with an error. (#592)

  • Fix has_many used with through so that when the association does not exist, and the matcher fails, it does not raise an error when producing the failure message. (#588)

  • Fix have_and_belong_to_many used with join_table so that it does not fail when foreign_key and/or association_foreign_key was specified on the association as a symbol instead of a string. (#584)

  • Fix allow_value when an i18n translation key is passed to with_message and the :against option is used to specify an alternate attribute. A bug here also happened to affect validate_confirmation_of when an i18n translation key is passed to with_message. (#593)

  • Fix class_name qualifier for association matchers so that if the model being referenced is namespaced, the matcher will correctly resolve the class before checking it against the association's class_name. (#537)

  • Fix validate_inclusion_of used with with_message so that it fails if given a message that does not match the message on the validation. (#598)

  • Fix route matcher so that when controller and action are specified in hash notation (e.g. posts#show), route parameters such as id do not need to be specified as a string but may be specified as a number as well. (#602)

  • Fix allow_value, validate_numericality_of and validate_inclusion_of so that they handle RangeErrors emitted from ActiveRecord 4.2. These exceptions arise whenever we attempt to set an attribute using a value that lies outside the range of the column (assuming the column is an integer). RangeError is now treated specially, failing the test instead of bubbling up as an error. (#634, #637, #642)


  • Add ability to test :primary_key option on associations. (#597)

  • Add allow_blank qualifier to validate_uniqueness_of to complement the allow_blank option. (#543)

  • Change set_session so that #[] and #to qualifiers are optional, similar to set_flash. That is, you can now say should set_session to assert that any flash value has been set, or should'value') to assert that any value in the session is 'value'.

  • Change set_session so that its #to qualifier supports regexps, similar to set_flash.

  • Add with_prefix qualifier to delegate_method to correspond to the prefix option for Rails's delegate macro. (#622)

  • Add support for Rails 4.2, especially fixing serialize matcher to remove warning about serialized_attributes being deprecated. (#627)

  • Update dependent qualifier on association matchers to support :destroy, :delete, :nullify, :restrict, :restrict_with_exception, and :restrict_with_error. You can also pass true or false to assert that the association has (or has not) been declared with any dependent option. (#631)


  • Tweak allow_value failure message so that it reads a bit nicer when listing existing errors.

Dependencies for 2.8.0

Name Requirement Status
>= 3.0.0

My projects using shoulda-matchers

Name Locked version Requirement
You should be logged in to see which of your projects use shoulda-matchers.