Interestingly enough, that typo was apparently the proximate cause of the error - once I corrected the spelling of “receive” I then got a usable error message. So, Phil, Jon, does this warrant filing a bug, given that it’s in Version 2.99 of RSpec?
Thanks, Phil. I don’t know how many times I looked at that code without seeing the typo. Jack > On Sep 5, 2020, at 12:50 AM, Phil Pirozhkov <pirjs...@gmail.com> wrote: > > Hi Jack > > Sorry for brevity, will reply in more detail later when I get to my computer. > > One thing I could spot is a typo in "receve" in one of the examples. > > There might be something wrong with the other examples, but I understand that > you're looking for a generic solution how to quickly get what's wrong in a > failure message, and clearly "undefined method" raised somewhere in RSpec's > internals is nowhere near being helpful. > > I guess we'll have to dig whats in base_formatter.rb:209, that may give an > idea of what is the root cause of missing exact failure messages. I'll check > it out, but if you have a chance to take a look yourself earlier than I'll > get to it, don't hesitate. RSpec is just as good as any other code, probably > even easier to read and understand. > > - Phil > > From: Jack Royal-Gordon > Sent: Saturday, 5 September 2020 07:48 > To: rspec@googlegroups.com > Reply To: rspec@googlegroups.com > Subject: [rspec] undefined method `detect' for nil:NilClass (NoMethodError) > in `find_failed_line' > > Running RSpec 2.99 (I know, I know, but I’m working on bringing my project up > to date), and one section of one of my spec files gives that error. I’m not > necessarily looking for a fix as much as a strategy for troubleshooting. Each > of the three examples by itself will cause the same problem (both by > isolating them on the command line and by commenting out the code). I also > tried eliminating the “before” block (and FWIW, the call being tested works > fine in production, not that that really means anything). > > > The section in question looks like: > > require 'spec_helper' > > describe UserDistributor do > … > describe '#scrape_sales_data' do > let(:ud) { FactoryGirl.create :user_distributor, :nook } > > before do > allow_any_instance_of(DistributorWorker).to > receive(:scrape_sales_data_for_user).and_return(true) > end > > subject { ud.scrape_sales_data } > > it 'sets the user scrape_status field' do > expect { subject }.to change { ud.user.scrape_status } > end > > it 'creates a distributor worker' do > expect(ud.distributor).to receve(:worker) > subject > end > > it 'calls #scrape_sales_data_for_user on the distibutor worker with the > UD' do > expect_any_instance_of(DistributorWorker).to > receive(:scrape_sales_data_for_user).with(ud) > subject > end > end > end > > I get the following output (using —format documentation and —backtrace): > > UserDistributor > #scrape_sales_data > sets the user scrape_status field (FAILED - 1) > creates a distributor worker (FAILED - 2) > calls #scrape_sales_data_for_user on the distibutor worker with the UD > (FAILED - 3) > > Failures: > > 1) UserDistributor#scrape_sales_data sets the user scrape_status field > /Users/jackrg/.rbenv/versions/2.0.0-p576/lib/ruby/gems/2.0.0/gems/rspec-core-2.99.2/lib/rspec/core/formatters/base_formatter.rb:209:in > `find_failed_line': undefined method `detect' for nil:NilClass > (NoMethodError) > from > /Users/jackrg/.rbenv/versions/2.0.0-p576/lib/ruby/gems/2.0.0/gems/rspec-core-2.99.2/lib/rspec/core/formatters/base_formatter.rb:191:in > `read_failed_line' > from > /Users/jackrg/.rbenv/versions/2.0.0-p576/lib/ruby/gems/2.0.0/gems/rspec-core-2.99.2/lib/rspec/core/formatters/base_text_formatter.rb:300:in > `dump_failure_info' > from > /Users/jackrg/.rbenv/versions/2.0.0-p576/lib/ruby/gems/2.0.0/gems/rspec-core-2.99.2/lib/rspec/core/formatters/base_text_formatter.rb:294:in > `dump_failure' > from > /Users/jackrg/.rbenv/versions/2.0.0-p576/lib/ruby/gems/2.0.0/gems/rspec-core-2.99.2/lib/rspec/core/formatters/base_text_formatter.rb:24:in > `block in dump_failures' > from > /Users/jackrg/.rbenv/versions/2.0.0-p576/lib/ruby/gems/2.0.0/gems/rspec-core-2.99.2/lib/rspec/core/formatters/base_text_formatter.rb:22:in > `each' > from > /Users/jackrg/.rbenv/versions/2.0.0-p576/lib/ruby/gems/2.0.0/gems/rspec-core-2.99.2/lib/rspec/core/formatters/base_text_formatter.rb:22:in > `each_with_index' > from > /Users/jackrg/.rbenv/versions/2.0.0-p576/lib/ruby/gems/2.0.0/gems/rspec-core-2.99.2/lib/rspec/core/formatters/base_text_formatter.rb:22:in > `dump_failures' > from > /Users/jackrg/.rbenv/versions/2.0.0-p576/lib/ruby/gems/2.0.0/gems/rspec-core-2.99.2/lib/rspec/core/reporter.rb:130:in > `block in notify' > from > /Users/jackrg/.rbenv/versions/2.0.0-p576/lib/ruby/gems/2.0.0/gems/rspec-core-2.99.2/lib/rspec/core/reporter.rb:129:in > `each' > from > /Users/jackrg/.rbenv/versions/2.0.0-p576/lib/ruby/gems/2.0.0/gems/rspec-core-2.99.2/lib/rspec/core/reporter.rb:129:in > `notify' > from > /Users/jackrg/.rbenv/versions/2.0.0-p576/lib/ruby/gems/2.0.0/gems/rspec-core-2.99.2/lib/rspec/core/reporter.rb:109:in > `finish' > from > /Users/jackrg/.rbenv/versions/2.0.0-p576/lib/ruby/gems/2.0.0/gems/rspec-core-2.99.2/lib/rspec/core/reporter.rb:60:in > `report' > from > /Users/jackrg/.rbenv/versions/2.0.0-p576/lib/ruby/gems/2.0.0/gems/rspec-core-2.99.2/lib/rspec/core/command_line.rb:21:in > `run' > from > /Users/jackrg/.rbenv/versions/2.0.0-p576/lib/ruby/gems/2.0.0/gems/rspec-core-2.99.2/lib/rspec/core/runner.rb:103:in > `run' > from > /Users/jackrg/.rbenv/versions/2.0.0-p576/lib/ruby/gems/2.0.0/gems/rspec-core-2.99.2/lib/rspec/core/runner.rb:17:in > `block in autorun' > > > -- > You received this message because you are subscribed to the Google Groups > "rspec" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to rspec+unsubscr...@googlegroups.com > <mailto:rspec+unsubscr...@googlegroups.com>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/rspec/B695317A-868B-4DF9-829B-62D84B6C1AB5%40pobox.com > > <https://groups.google.com/d/msgid/rspec/B695317A-868B-4DF9-829B-62D84B6C1AB5%40pobox.com?utm_medium=email&utm_source=footer>. > > > -- > You received this message because you are subscribed to the Google Groups > "rspec" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to rspec+unsubscr...@googlegroups.com > <mailto:rspec+unsubscr...@googlegroups.com>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/rspec/20200905075016.5840978.49327.7113%40gmail.com > > <https://groups.google.com/d/msgid/rspec/20200905075016.5840978.49327.7113%40gmail.com?utm_medium=email&utm_source=footer>. -- You received this message because you are subscribed to the Google Groups "rspec" group. To unsubscribe from this group and stop receiving emails from it, send an email to rspec+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/rspec/2096944A-B19C-4028-8885-BEDA0B009C08%40pobox.com.