[英]NoMethodError: undefined method `mock' with Mocha and Rails 3
[英]NoMethodError: undefined method `mock' for minitest and mocha
我正在為 Rails 3 開發一個 gem,並且在 travis-ci.org 的 Ruby 1.8.7 下運行它時,在我的測試套件中遇到了一個錯誤:
/home/travis/.rvm/gems/ruby-1.8.7-p370/gems/minitest-3.5.0/lib/minitest/unit.rb:874:in `_run_suite': undefined method `run' for #<TestActivist:0xb6936dd4> (NoMethodError)
69 from /home/travis/.rvm/gems/ruby-1.8.7-p370/gems/minitest-3.5.0/lib/minitest/unit.rb:866:in `map'
70 from /home/travis/.rvm/gems/ruby-1.8.7-p370/gems/minitest-3.5.0/lib/minitest/unit.rb:866:in `_run_suite'
71 from /home/travis/.rvm/gems/ruby-1.8.7-p370/gems/minitest-3.5.0/lib/minitest/unit.rb:853:in `_run_suites'
72 from /home/travis/.rvm/gems/ruby-1.8.7-p370/gems/minitest-3.5.0/lib/minitest/unit.rb:853:in `map'
73 from /home/travis/.rvm/gems/ruby-1.8.7-p370/gems/minitest-3.5.0/lib/minitest/unit.rb:853:in `_run_suites'
74 from /home/travis/.rvm/gems/ruby-1.8.7-p370/gems/minitest-3.5.0/lib/minitest/unit.rb:826:in `_run_anything'
75 from /home/travis/.rvm/gems/ruby-1.8.7-p370/gems/minitest-3.5.0/lib/minitest/unit.rb:1015:in `run_tests'
76 from /home/travis/.rvm/gems/ruby-1.8.7-p370/gems/minitest-3.5.0/lib/minitest/unit.rb:1002:in `send'
77 from /home/travis/.rvm/gems/ruby-1.8.7-p370/gems/minitest-3.5.0/lib/minitest/unit.rb:1002:in `_run'
78 from /home/travis/.rvm/gems/ruby-1.8.7-p370/gems/minitest-3.5.0/lib/minitest/unit.rb:1001:in `each'
79 from /home/travis/.rvm/gems/ruby-1.8.7-p370/gems/minitest-3.5.0/lib/minitest/unit.rb:1001:in `_run'
80 from /home/travis/.rvm/gems/ruby-1.8.7-p370/gems/minitest-3.5.0/lib/minitest/unit.rb:990:in `run'
81 from /home/travis/.rvm/gems/ruby-1.8.7-p370/gems/minitest-3.5.0/lib/minitest/unit.rb:748:in `autorun'
82 from /home/travis/.rvm/gems/ruby-1.8.7-p370/gems/rake-0.9.2.2/lib/rake/rake_test_loader.rb:21
83rake aborted!
84Command failed with status (1): [/home/travis/.rvm/rubies/ruby-1.8.7-p370/b...]
這是失敗工作的鏈接: https : //travis-ci.org/#!/ pokonski/public_activity/jobs/ 2586051
在 Ruby > 1.8.7 中一切正常。
我的 .gemspec 的相關部分:
s.add_dependency 'activerecord', '>= 3.0.0'
s.add_dependency 'activesupport', '>= 3.0.0'
s.add_dependency 'actionpack', '>= 3.0.0'
s.add_dependency 'i18n', '>= 0.5.0'
if RUBY_VERSION == "1.8.7"
s.add_development_dependency 'minitest', '>= 3.2.0'
else
s.add_development_dependency 'simplecov', '>= 0.6.4'
end
s.add_development_dependency 'bundler', '>= 1.1'
s.add_development_dependency 'rake', '>= 0.9'
s.add_development_dependency 'sqlite3'
s.add_development_dependency 'mocha', '>= 0.12.1'
s.add_development_dependency 'rails', '>= 3.0.0' # generators test
和 Gemfile:
source :rubygems
gemspec
gem 'yard'
有趣的是,當使用 ruby-1.8.7-p370 在本地運行測試時,我收到一個錯誤,其中包含不同的缺失方法:
test_resolving_values(TestCommon):
NoMethodError: undefined method `mock' for #<TestCommon:0x7ffdc8a79388>
/home/piotrek/projekty/public_activity/test/test_common.rb:85:in `test_resolving_values'
失敗行的更多源代碼: https : //github.com/pokonski/public_activity/blob/master/test/test_common.rb#L85
任何人都知道發生了什么?
原來是因為 test_generators.rb 使用了 Rails::Generators::TestCase,而后者又繼承自 TestUnit。
因此,Mocha 錯誤地修補了 Test::Unit 而不是 MiniTest。 解決方案是在 test_generators.rb 中要求test_helper
並強制 MiniTest gem 到 3.2.0 版本。
此提交中的完整解決方案: https : //github.com/pokonski/public_activity/commit/731e953068297c7aa6f6f7e2b2251c79843943a1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.