ruby - Rspec any_instance stub 导致错误未定义方法 __rspec_original_dup

标签 ruby rspec stub

我正在尝试为该类的任何实例(通过 any_instance) stub 一个类方法。我的测试成功运行,但在测试结束时,当 rspec 尝试重置 any_instance stub 时,它会抛出错误(无法从回溯中找到匹配行)。这是明显的罪魁祸首代码行(删除它会删除错误):

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

完整错误如下。似乎 stub 应该(但没有)创建 __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

最佳答案

我通过简单地使用 Rspec v2.10.0 而不是 v2.11.0 解决了这个问题:

gem 'rspec', '~> 2.10.0'

从 Henrik 提供的链接来看,他们可能会发布 Rspec 的错误修正。 watch this issue想要查询更多的信息。与此同时,降级为我解决了这个问题。

(感谢你帮助我解决这个问题,Henrik。)

关于ruby - Rspec any_instance stub 导致错误未定义方法 __rspec_original_dup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11679987/

相关文章:

ruby-on-rails - OS X 上的 bundle 错误

ruby-on-rails - 我的复杂路线的 Controller 规范中没有路线匹配

ruby-on-rails - 将ActiveRecord对象与Rspec进行比较

ruby-on-rails - 用 RSpec stub before_filter

使用 Junit : testing network/bluetooth resources 进行 Android 单元测试

ruby - 你如何过滤 Ruby Find.find() 结果?

ruby Aws-sdk v2 公共(public) url 访问被拒绝问题

Ruby mechanize 未获取完整内容

ruby - 任何类似 Erlang 的 RSpec 工具?

unit-testing - 在 Node.js 的单元测试中 stub 依赖项