Mocha Mock Carries To Another Test

后端 未结 5 1027
无人共我
无人共我 2020-12-06 00:50

I have been following the 15 TDD steps to create a Rails application guide - but have run into an issue I cannot seem to resolve. For the functional test of the WordsContro

相关标签:
5条回答
  • 2020-12-06 01:26

    I had the same problem, mocked functionality was not isolated to a test, it seems to be a problem with the load order of Mocha.

    I had some issues getting Mocha to work with Rails3. I found a few stackoverflow posts regarding, but didn't stumble across the solution until I found a post on agoragames.com

    Basically, in the Gemfile of your project, the require for Mocha should look like:

    gem 'mocha', :require => false
    

    Then in test/test_helper.rb, add a require line for mocha:

    ...
    ...
    require File.expand_path('../../config/environment', __FILE__)
    require 'rails/test_help'
    require 'mocha'
    
    class ActiveSupport::TestCase
    ...
    ...
    

    I think the require line for mocha in the Gemfile means that you need to already have mocha installed as a gem, bundler won't take care of it for you.

    0 讨论(0)
  • 2020-12-06 01:27

    How are you requiring mocha? Are you using bundler? It sounds a bit as if the mocha teardown hook isn't being called?

    0 讨论(0)
  • 2020-12-06 01:27

    Those solutions didn't work for me on their own, using Ruby 2.2.2, Rails 4.2.2, mocha 1.1.0, shoulda-context 1.2.1, factory_girl_rails 4.5.0 and a few more testing related gems.

    What did it was also moving these two lines at the bottom of my test_helper.rb:

    require 'mocha/setup'
    require 'mocha/test_unit'
    

    I also removed require 'test/unit'. It appears that mocha/test_unit already does that for me.

    0 讨论(0)
  • 2020-12-06 01:32

    Additionally, it seems mocha_teardown is not being called with rails31. Mocks that are setup are never removed... (this additional hack fixes it)

      class ActiveSupport::TestCase
        def teardown
          super
          Mocha::Mockery.instance.teardown
          Mocha::Mockery.reset_instance    
        end
      end
    
    0 讨论(0)
  • 2020-12-06 01:36

    mocha needs to be loaded last. I struggled a lot with this problem too.

    #Gemfile
      group :test
        gem 'mocha', '~>0.9.8', :require => false
        ...
      end
    

    and

    test_helper.rb
      ....
      #at the very bottom
      require 'mocha'
    
    0 讨论(0)
提交回复
热议问题