I am using pry-rescue 1.4.2 and when my test fails it doesn't drop me into Pry, it just gives me this error:
UsersController
DELETE #destroy
when the inviter is being deleted and invited has not accepted invitation
WARNING: Tried to inspect exception outside of Pry::rescue{ }
should confirm that the inviter_membership has a valid member_id (FAILED - 1)
WARNING: Tried to inspect exception outside of Pry::rescue{ }
should successfullly destroy that user record (FAILED - 2)
And
/.rvm/gems/ruby-2.2.3@myapp/gems/rspec-core-3.2.3/lib/rspec/core/notifications.rb:263:in `find_failed_line': undefined method `find' for nil:NilClass (NoMethodError)
/.rvm/gems/ruby-2.2.3@myapp/gems/rspec-core-3.2.3/lib/rspec/core/notifications.rb:244:in `read_failed_line'
/.rvm/gems/ruby-2.2.3@myapp/gems/rspec-core-3.2.3/lib/rspec/core/notifications.rb:226:in `failure_lines'
/.rvm/gems/ruby-2.2.3@myapp/gems/rspec-core-3.2.3/lib/rspec/core/notifications.rb:174:in `colorized_message_lines'
/.rvm/gems/ruby-2.2.3@myapp/gems/rspec-core-3.2.3/lib/rspec/core/notifications.rb:272:in `formatted_message_and_backtrace'
/.rvm/gems/ruby-2.2.3@myapp/gems/rspec-core-3.2.3/lib/rspec/core/notifications.rb:199:in `fully_formatted'
/.rvm/gems/ruby-2.2.3@myapp/gems/rspec-core-3.2.3/lib/rspec/core/notifications.rb:110:in `block in fully_formatted_failed_examples'
/.rvm/gems/ruby-2.2.3@myapp/gems/rspec-core-3.2.3/lib/rspec/core/notifications.rb:109:in `each'
/.rvm/gems/ruby-2.2.3@myapp/gems/rspec-core-3.2.3/lib/rspec/core/notifications.rb:109:in `each_with_index'
/.rvm/gems/ruby-2.2.3@myapp/gems/rspec-core-3.2.3/lib/rspec/core/notifications.rb:109:in `fully_formatted_failed_examples'
/.rvm/gems/ruby-2.2.3@myapp/gems/rspec-core-3.2.3/lib/rspec/core/formatters/base_text_formatter.rb:33:in `dump_failures'
/.rvm/gems/ruby-2.2.3@myapp/gems/rspec-core-3.2.3/lib/rspec/core/reporter.rb:146:in `block in notify'
/.rvm/gems/ruby-2.2.3@myapp/gems/rspec-core-3.2.3/lib/rspec/core/reporter.rb:145:in `each'
/.rvm/gems/ruby-2.2.3@myapp/gems/rspec-core-3.2.3/lib/rspec/core/reporter.rb:145:in `notify'
/.rvm/gems/ruby-2.2.3@myapp/gems/rspec-core-3.2.3/lib/rspec/core/reporter.rb:124:in `finish'
/.rvm/gems/ruby-2.2.3@myapp/gems/rspec-core-3.2.3/lib/rspec/core/reporter.rb:64:in `report'
/.rvm/gems/ruby-2.2.3@myapp/gems/rspec-core-3.2.3/lib/rspec/core/runner.rb:108:in `run_specs'
/.rvm/gems/ruby-2.2.3@myapp/gems/rspec-core-3.2.3/lib/rspec/core/runner.rb:86:in `run'
/.rvm/gems/ruby-2.2.3@myapp/gems/rspec-core-3.2.3/lib/rspec/core/runner.rb:70:in `run'
/.rvm/gems/ruby-2.2.3@myapp/gems/rspec-core-3.2.3/lib/rspec/core/runner.rb:38:in `invoke'
/.rvm/gems/ruby-2.2.3@myapp/gems/rspec-core-3.2.3/exe/rspec:4:in `<top (required)>'
/.rvm/gems/ruby-2.2.3@myapp/bin/rspec:23:in `load'
/.rvm/gems/ruby-2.2.3@myapp/bin/rspec:23:in `<main>'
/.rvm/gems/ruby-2.2.3@myapp/bin/ruby_executable_hooks:15:in `eval'
/.rvm/gems/ruby-2.2.3@myapp/bin/ruby_executable_hooks:15:in `<main>'
These are the tests that it fails on:
RSpec.describe UsersController, :type => :controller do
include ApplicationHelper
include RelationshipConversions
describe 'DELETE #destroy' do
it "should find the correct user record"
context "when the inviter is being deleted and invited has not accepted invitation" do
before :each do
user1 = create(:user, gender: 0)
user2 = create(:user)
member = create(:member, email: user2.email, first_name: user2.first_name, last_name: user2.last_name, bio: user2.bio, gender: user2.gender)
membership = create(:membership, member: member, family_tree: user1.family_tree, inviter: user1, relation: "sister")
connection = create(:connection, inviter_membership: membership)
login_user
end
it "should confirm that the inviter_membership has a valid member_id" do
expect(@user1.inviter_memberships.first.member?).to_be true
end
it "should successfullly destroy that user record" do
delete :destroy, @user
it { should respond_with(200) }
end
end
I thought it was the version of Ruby I was using so I upgraded to ruby 2.2.3p173.
Then I did a fresh bundle install and pulled all the latest versions of the gems I am using. Still no dice.
What could be causing this?
Edit 1
Quick update when I execute my spec without using rescue rspec /file/path/to/spec.rb, it gives me a stack level too deep error. Specifically:
1) UsersController DELETE #destroy when the inviter is being deleted and invited has not accepted invitation should confirm that the inviter_membership has a valid member_id
Failure/Error: membership = create(:membership, member: member, family_tree: user1.family_tree, inviter: user1, relation: "sister")
SystemStackError:
stack level too deep
# /gems/arel-5.0.1.20140414130214/lib/arel/visitors/visitor.rb:22:in `visit'
# /gems/arel-5.0.1.20140414130214/lib/arel/visitors/depth_first.rb:11:in `visit'
# /gems/arel-5.0.1.20140414130214/lib/arel/visitors/depth_first.rb:91:in `visit_Arel_Attribute'
# /gems/arel-5.0.1.20140414130214/lib/arel/visitors/visitor.rb:22:in `visit'
# /gems/arel-5.0.1.20140414130214/lib/arel/visitors/depth_first.rb:11:in `visit'
# /gems/arel-5.0.1.20140414130214/lib/arel/visitors/depth_first.rb:162:in `block in visit_Array'
And the same for the other failing test. It fails on the same membership = create(:membership...) line.
This is my Memberships Factory:
FactoryGirl.define do
factory :membership do
family_tree
association :inviter, factory: :user
association :invited, factory: :user
association :inviter_connection, factory: :connection
association :invited_connection, factory: :connection
relation { Faker::Lorem.word }
member
end
end
What could be causing this?
Edit 2
We are making progress with the after_create callback in the Factory. But for more details on how the associations are setup, consider the following:
class Membership < ActiveRecord::Base
belongs_to :family_tree
belongs_to :member
belongs_to :inviter, class_name: "User", foreign_key: "user_id"
belongs_to :invited, class_name: "User", foreign_key: "invited_id"
has_one :inviter_connection, class_name: "Connection", foreign_key: "membership_id", dependent: :destroy
has_one :invited_connection, class_name: "Connection", foreign_key: "invited_membership_id", dependent: :destroy
end
Connection:
class Connection < ActiveRecord::Base
belongs_to :inviter_membership, class_name: "Membership", foreign_key: "membership_id"
belongs_to :invited_membership, class_name: "Membership", foreign_key: "invited_membership_id"
belongs_to :invited_user, class_name: "User", foreign_key: "invited_user_id"
belongs_to :inviter_user, class_name: "User", foreign_key: "inviter_user_id"
validates :request_status, presence: true
enum request_status: { pending: 0, accepted: 1, rejected: 2, removed: 3 }
end
Member:
class Member < ActiveRecord::Base
has_many :memberships
end
User:
class User < ActiveRecord::Base
has_one :family_tree, dependent: :destroy
has_many :memberships
has_many :inviter_memberships, class_name: "Membership", foreign_key: "user_id"
has_many :invited_memberships, class_name: "Membership", foreign_key: "invited_id", dependent: :destroy
has_many :inviter_connections, class_name: "Connection", foreign_key: "inviter_user_id"
has_many :invited_connections, class_name: "Connection", foreign_key: "invited_user_id"
end
Family Tree:
class FamilyTree < ActiveRecord::Base
belongs_to :user
has_many :memberships, dependent: :destroy
has_many :active_members, through: :memberships, source: :invited, dependent: :destroy
has_many :passive_members, through: :memberships, source: :member, dependent: :destroy
end
It looks like the issue is related to associations between factories, connection factory has a membership and membership has a connection
If you remove the following lines of membership factory:
association :inviter_connection, factory: :connection
association :invited_connection, factory: :connection
and append the following:
after(:create) do |membership, evaluator|
membership.inviter_connection = FactoryGirl.create(:connection, inviter_membership: membership)
membership.invited_connection = FactoryGirl.create(:connection, invited_membership: membership)
end
It could be the solution. Please note that the same can happens with the other associations
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With