0.0
No commit activity in last 3 years
No release in over 3 years
Gem for turning off validations and callbacks in test environment
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.8.3
>= 0
>= 0

Runtime

 Project Readme

Test friendly¶ ↑

Test friendly gem provides functionality to turn off validations in test environment.

In order to turn off validations in test environment, class inherited from ActiveRecord::Base should have acts_as_test_friendly static method and test_friendly_validations block where validations should be inserted. Here is an example:

class User < ActiveRecord::Base
  acts_as_test_friendly

  attr_accessor :first_name, :last_name

  test_friendly_validations do
    validates_presence_of :first_name, :last_name
  end

end

In order to turn validations on, User.force_validations method has to be used (usually in before validation hook). Also user can optionally turn on only specific validations:

class User < ActiveRecord::Base
  acts_as_test_friendly

  attr_accessor :first_name, :last_name, :new_attribute

  test_friendly_validations do
    validates_presence_of :first_name, :last_name
  end

  test_friendly_validations(:additional) do
    validates_presence_of :new_attribute
  end

end

Here in order to turn on only additional validations, User.force_validations(:additional) construction has to be used. If tag is not specified - validation goes under :defaults tag. So, in order to turn on first and last name validation in example above, User.force_validations(:defaults) has to be used. For forcing all validations for all tags, User.force_validations(:all) should be used.

There is also drop validations functionality. It has same signature as force_validations, but different method is used. User.drop_validations

Test friendly gem is also supplied with functionality that lets turn on/off callbacks in test environment. Here is an example of class:

class User < ActiveRecord::Base
  include AllMissingUserMethods

  acts_as_test_friendly

  attr_accessor :first_name, :last_name, :new_attribute

  test_friendly_callbacks do
    after_save :send_notification_email
  end

  test_friendly_callbacks(:additional) do
    before_save :create_order_instance
  end

end

Callbacks work same way as validations, but have different methods signature (valdiations are substituted with callbacks). User.force_callbacks, User.force_callbacks(:additional), User.force_callbacks(:all), User.drop_callbacks, User.drop_callbacks(:additional), User.drop_callbacks(:all) all can be used.

At the moment gem automatically turns off validations and callbacks in every Rspec test. If you are using different testing tool, there are some methods that can help you:

1. TestFriendly::Global.drop_validations(:all) - drops all validations
2. TestFriendly::Global.force_validations(:all) - forces all validations
3. TestFriendly::Global.drop_callbacks(:all) - drops all callbacks
4. TestFriendly::Global.force_callbacks(:all) - forces all callbacks

Also you can use specific tag as parameter as well as leave parameter blank (in this case :defaults tag will be used).

Contributing to test_friendly¶ ↑

  • Check out the latest master to make sure the feature hasn’t been implemented or the bug hasn’t been fixed yet.

  • Check out the issue tracker to make sure someone already hasn’t requested it and/or contributed it.

  • Fork the project.

  • Start a feature/bugfix branch.

  • Commit and push until you are happy with your contribution.

  • Make sure to add tests for it. This is important so I don’t break it in a future version unintentionally.

  • Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.

Copyright © 2012 Andriy Romanov. See LICENSE.txt for further details.