For a bare top-level describe to work, RSpec has to monkey patch some objects it does not own (specifically, the main object, and the Module class). The config.disable_monkey_patching! option turns off all of RSpec’s monkey patching, including the describe monkey patched onto main and Module. Thus, when you use that option, you get a NoMethodError when you try to call Module#describe or main.describe as you are in your example.
For more info, check out our original discussion <http://rspec.info/blog/2013/07/the-plan-for-rspec-3/#zero-monkey-patching-mode> of the option. Also, if you’re going through the new *Effective Testing with RSpec 3: Build Ruby Apps with Confidence* book (as I suspect you are, given the book builds an app called ExpenseTracker and it looks like that’s what you’re working on!), there’s an explanation of this at the bottom of page 163 and top of page 164. HTH, Myron On Thu, Sep 21, 2017 at 7:44 AM, Javix <[email protected]> wrote: > I discovered that when I uncomment *begin /end* block in the generated > *spec_helper.rb* file my simple spec fails if I do not use RSpec prefix > for describe blocks as follows: > > require 'rack/test' > > > module ExpenseTracker > describe 'API draft' do > include Rack::Test::Methods > > it 'records submitted expenses' > end > end > > > Error: > > An error occurred while loading ./spec/unit/draft_spec.rb. > > Failure/Error: > > describe *'*API draft*'* do > > include *Rack*::*Test*::*Methods* > > > > it *'*records submitted expenses*'* > > end > > > NoMethodError: > > undefined method `describe' for ExpenseTracker:Module > > # ./spec/unit/draft_spec.rb:4:in `<module:ExpenseTracker>' > > # ./spec/unit/draft_spec.rb:3:in `<top (required)>' > > No examples found. > > > Finished in 0.0003 seconds (files took 0.12244 seconds to load) > > 0 examples, 0 failures, 1 error occurred outside of examples > > If I change the same spec by prefixing describe with RSpec, it works: > > module ExpenseTracker > RSpec.describe 'API draft' do > include Rack::Test::Methods > > it 'records submitted expenses' > end > end > > *expense_tracker* *git:(**unit_tests**) **✗* rspec spec/unit/draft_spec.rb > > > API draft > > records submitted expenses (PENDING: Not yet implemented) > > > Pending: (Failures listed here are expected and do not affect your suite's > status) > > > 1) API draft records submitted expenses > > # Not yet implemented > > # ./spec/unit/draft_spec.rb:7 > > > > Finished in 0.00194 seconds (files took 0.12484 seconds to load) > > 1 example, 0 failures, 1 pending > > Any ideas why ? Thank you. > > -- > 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 [email protected]. > To post to this group, send email to [email protected]. > To view this discussion on the web visit https://groups.google.com/d/ > msgid/rspec/05b92135-d300-4f40-98ea-e7725d6e9fba%40googlegroups.com > <https://groups.google.com/d/msgid/rspec/05b92135-d300-4f40-98ea-e7725d6e9fba%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- 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 [email protected]. To post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/rspec/CADUxQmuU3VA9dFGa3S%3D6a2am8bUJOMbugNvARe-30zWGz3yf2w%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
