2012-07-27 72 views
3

我試圖爲該類的任何實例(通過any_instance)剔除一個類方法。我的測試成功運行,但在測試結束時,當rspec試圖重置any_instance存根時,它會引發錯誤(無法從回溯中找到匹配的行)。這是明顯的罪魁禍首代碼行(刪除它刪除錯誤):Rspec any_instance存根導致錯誤未定義的方法__rspec_original_dup

Confetti::Config.any_instance.stub(:write_info) 

完整的錯誤如下。看起來像存根應該(但未能)創建__rspec_original_dup方法,並且當重置發生時,它找不到預期的方法。

Failure/Error: Unable to find matching line from backtrace 
NameError: 
    undefined method `__rspec_original_dup' for class `Confetti::Config' 
# /Library/Ruby/Gems/1.8/gems/rspec-mocks-2.11.1/lib/rspec/mocks/any_instance.rb:73:in `alias_method' 
# /Library/Ruby/Gems/1.8/gems/rspec-mocks-2.11.1/lib/rspec/mocks/any_instance.rb:73:in `restore_dup' 
# /Library/Ruby/Gems/1.8/gems/rspec-mocks-2.11.1/lib/rspec/mocks/any_instance.rb:72:in `class_eval' 
# /Library/Ruby/Gems/1.8/gems/rspec-mocks-2.11.1/lib/rspec/mocks/any_instance.rb:72:in `restore_dup' 
# /Library/Ruby/Gems/1.8/gems/rspec-mocks-2.11.1/lib/rspec/mocks/any_instance.rb:46:in `rspec_reset' 
# /Library/Ruby/Gems/1.8/gems/rspec-mocks-2.11.1/lib/rspec/mocks/space.rb:17:in `reset_all' 
# /Library/Ruby/Gems/1.8/gems/rspec-mocks-2.11.1/lib/rspec/mocks/space.rb:16:in `each' 
# /Library/Ruby/Gems/1.8/gems/rspec-mocks-2.11.1/lib/rspec/mocks/space.rb:16:in `reset_all' 
# /Library/Ruby/Gems/1.8/gems/rspec-mocks-2.11.1/lib/rspec/mocks.rb:23:in `teardown' 
# /Library/Ruby/Gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/mocking/with_rspec.rb:18:in `teardown_mocks_for_rspec' 
# /Library/Ruby/Gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/example.rb:308:in `run_after_each' 
# /Library/Ruby/Gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/example.rb:119:in `run' 
# /Library/Ruby/Gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/example.rb:253:in `with_around_each_hooks' 
# /Library/Ruby/Gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/example.rb:110:in `run' 
# /Library/Ruby/Gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:378:in `run_examples' 
# /Library/Ruby/Gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:374:in `map' 
# /Library/Ruby/Gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:374:in `run_examples' 
# /Library/Ruby/Gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:360:in `run' 
# /Library/Ruby/Gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:361:in `run' 
# /Library/Ruby/Gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:361:in `map' 
# /Library/Ruby/Gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:361:in `run' 
# /Library/Ruby/Gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/command_line.rb:28:in `run' 
# /Library/Ruby/Gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/command_line.rb:28:in `map' 
# /Library/Ruby/Gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/command_line.rb:28:in `run' 
# /Library/Ruby/Gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/reporter.rb:34:in `report' 
# /Library/Ruby/Gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/command_line.rb:25:in `run' 
# /Library/Ruby/Gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/runner.rb:69:in `run' 
# /Library/Ruby/Gems/1.8/gems/rspec-core-2.11.1/lib/rspec/core/runner.rb:8:in `autorun' 
# /usr/bin/rspec:19 
+0

看起來像您使用的是OSX系統Ruby。如果您使用RVM或rbenv,它可以工作嗎? 我問,因爲我們看到相同的行爲,但只適用於運行OSX系統Ruby的開發人員。 – bobocopy 2012-07-30 22:07:35

+0

升級到RSpec 2.11後得到類似的東西。我使用RVM的Ruby 1.9.3,儘管在OS X上,如果它有任何相關性的話。我執行'ThinkingSphinx :: Search.any_instance.stub(:error)'並在backtrace中使用'/ Users/henrik /'來獲取類'\ ThinkingSphinx :: Search''的錯誤'undefined method \'dup'。 rvm/gems/[email protected]/gems/rspec-mocks-2.11.1/lib/rspec/mocks/any_instance.rb:64:在'alias_method'中。 – 2012-07-31 14:46:15

+1

創建問題:https://github.com/rspec/rspec-mocks/issues/168 – 2012-07-31 16:51:57

回答

3

我解決了這個簡單使用Rspec的v2.10.0代替v2.11.0的:

gem 'rspec', '~> 2.10.0' 

從這個亨裏克提供的鏈接,這聽起來像他們可能會釋放一個Rspec的修正錯誤。有關更多信息,請參閱this issue。與此同時,降級解決了我的問題。

(感謝您幫助我解決這個問題的工作,Henrik。)

相關問題