ruby on rails - How do I test these callbacks on 1 of my models? -


please note: this question may seem similar my other question, , that...similar. not identical. replicated of info because relevant question. being said, didn't want overwhelm either question many requests, split them up.

i relatively new testing, please forgive me if question seems basic.

i using rspec, shoulda, factorygirl , faker. class user.

these schema & associations user model:

# == schema information # # table name: users # #  id                     :integer          not null, primary key #  email                  :string(255)      default(""), not null #  encrypted_password     :string(255)      default("") #  reset_password_token   :string(255) #  reset_password_sent_at :datetime #  remember_created_at    :datetime #  sign_in_count          :integer          default(0), not null #  current_sign_in_at     :datetime #  last_sign_in_at        :datetime #  current_sign_in_ip     :string(255) #  last_sign_in_ip        :string(255) #  created_at             :datetime #  updated_at             :datetime #  first_name             :string(255) #  confirmation_token     :string(255) #  confirmed_at           :datetime #  confirmation_sent_at   :datetime #  unconfirmed_email      :string(255) #  invitation_relation    :string(255) #  avatar                 :string(255) #  invitation_token       :string(255) #  invitation_created_at  :datetime #  invitation_sent_at     :datetime #  invitation_accepted_at :datetime #  invitation_limit       :integer #  invited_by_id          :integer #  invited_by_type        :string(255) #  invitations_count      :integer          default(0) #  bio                    :text #  last_name              :string(255) #  gender                 :integer          default(0) #    has_one :family_tree, dependent: :destroy   has_many :memberships, dependent: :destroy   has_many :nodes, dependent: :destroy   has_many :comments, dependent: :destroy    enum gender: { male: 0, female: 1 }    after_create :create_family_tree   after_destroy :remove_all_memberships   after_invitation_accepted :send_emails 

the methods (which callbacks) unsure of testing are:

  private     def create_family_tree       family_tree = self.build_family_tree(name: "#{name}'s family tree")       family_tree.save!     end      def remove_all_memberships       memberships = membership.includes(:user).where(user_id: self.id)       memberships.destroy_all     end      def send_emails       invited_user = self       inviter_user = self.invited_by       welcome_message = inviteacceptance.welcome_to_invited_user_after_signing_up(invited_user, inviter_user)       welcome_message.deliver       notification_message = inviteacceptance.notification_that_invited_user_signed_up(inviter_user, invited_user)       notification_message.deliver     end 

this user_spec.rb far, tests associations , gender value, both of fine:

require 'rails_helper'  describe user   { should have_one(:family_tree) }   { should have_many(:memberships) }   { should have_many(:nodes) }   { should have_many(:comments) }    "should return gender enum value, 0 = male, , 1 = female"     expect(build(:user).gender).to eq "female"   end    end 

this spec/factories/users.rb

factorygirl.define   factory :user     first_name { faker::name.first_name }     last_name { faker::name.last_name }     email { faker::internet.email }     password { faker::internet.password(10) }     password_confirmation { faker::internet.password(10) }     bio { faker::lorem.paragraph }     invitation_relation { faker::lorem.word }     # required if devise confirmable module used     confirmed_at time.now     gender 1   end end 

i guess real question is, how write tests methods , how test callbacks separately?

i test methods normally, not worrying used callbacks. means establish known state, perform operation, , check desired state, each one.

then, can use shoulda-callback-matchers verify proper callbacks in place without writing ton of code.

alternatively, establish known state, run callback method performing operation triggers callback, , check desired state.


Comments

Popular posts from this blog

shopping cart - Page redirect not working PHP -

php - How to modify a menu to show sub-menus -

python - Installing PyDev in eclipse is failed -