旧语法

历史上,rspec-mocks 使用了猴子补丁语法来允许你模拟或存根任何对象。

obj.stub(:foo).and_return(15)
obj.should_receive(:bar)

不幸的是,当应用于 委托/代理对象 时,这种方法容易导致奇怪的、令人困惑的故障。对于像 `stub` 这样的方法,它必须在系统中的每个对象上定义才能正常工作,但 RSpec 并不拥有系统中的每个对象,也无法保证它始终保持一致。

为此,在 RSpec 2.14 中,我们引入了新的语法,完全避免了猴子补丁。这是此文档目录以外所有示例中显示的语法。从 RSpec 3 开始,我们认为这是 rspec- mocks 的主要推荐语法。旧的猴子补丁语法仍然有效,但如果你使用它而不显式选择它,你将收到弃用警告。

# If you're using rspec-core:
RSpec.configure do |config|
  config.mock_with :rspec do |mocks|
    mocks.syntax = :should
  end
end

# Or, if you're using rspec-mocks in another context:
RSpec::Mocks.configuration.syntax = :should

我们没有计划永远关闭旧语法,但我们可能会在 RSpec 4 中将其提取到外部 gem 中。

如果你有一个使用旧语法的旧项目,并且想将其更新到当前语法,请查看 transpec

主题