简体   繁体   English

rspec-core中的find_failed_line错误

[英]find_failed_line error in rspec-core

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: 我正在使用pry-rescue 1.4.2 ,当我的测试失败时它不会让我进入Pry,它只是给了我这个错误:

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 . 我认为这是我使用的Ruby版本所以我升级到ruby 2.2.3p173

Then I did a fresh bundle install and pulled all the latest versions of the gems I am using. 然后我做了一个全新的bundle install并拉出了我正在使用的所有最新版本的宝石。 Still no dice. 仍然没有骰子。

What could be causing this? 可能是什么导致了这个?

Edit 1 编辑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. 当我执行我的规范而不使用rescue rspec /file/path/to/spec.rb时快速更新,它给我一个stack level too deep错误。 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. 它在相同的membership = create(:membership...)行上失败。

This is my Memberships Factory : 这是我的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 编辑2

We are making progress with the after_create callback in the Factory. 我们正在使用Factory中的after_create回调进行操作。 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 看起来这个问题与工厂之间的关联有关, connection工厂有membershipmembershipconnection

If you remove the following lines of membership factory: 如果删除以下membership工厂行:

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 请注意,其他协会也会发生同样的情况

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM