在升级RSpec之前,我在我的features / support / hooks.rb文件中有这个块:
After do
begin
Challenge.unstub(:current)
rescue RSpec::Mocks::MockExpectationError
end
end
升级后,我收到了这个通知:
弃用:不使用rspec-mocks的旧
unstub
语法中的:should
而不显式启用语法。使用allow(...).to_receive(...).and_call_original
或明确启用:should
。来自/Users/grant/xx/features/support/hooks.rb:37:inblock in <top (required)>
。
好的,听起来很简单。我把我的代码更改为:
After do
begin
allow(Challenge).to receive(:current).and_call_original
rescue RSpec::Mocks::MockExpectationError
end
end
但现在我得到了:
的未定义方法
allow
#<Cucumber::Rails::World:0x007facbed9f1d0> (NoMethodError)
笏?来吧RSpec,我完全按照你的要求做了!
基于一些谷歌搜索,我尝试将require 'rspec/expectations'
添加到此文件的顶部。它没有做任何事情。
任何人都可以告诉我我缺少的东西吗?
答案 0 :(得分:1)
也许您的RSpec配置无法启用allow
语法。在您的RSpec配置文件中,可能是spec/spec_helper.rb
或spec/rails_helper.rb
,您是否有以下内容?
RSpec.configure do |config|
config.mock_with :rspec do |c|
c.syntax = :should
end
end
如果是,请查看是否将其更改为
RSpec.configure do |config|
config.mock_with :rspec do |c|
c.syntax = [:should, :expect]
end
end
解决了您的问题。然后将should
的所有用法替换为allow
的使用,并升级:should
语法的其他用法,可能使用transpec,并禁用:should
语法,你就是最新的。
来源:https://relishapp.com/rspec/rspec-expectations/docs/syntax-configuration
答案 1 :(得分:1)
事实证明,我所做的事情完全是不必要的,这可能是为allow
上下文定义After
的原因。
在每个示例(在Rspec中)或场景(在黄瓜中)之后删除Rspec-mock存根,因此在After
块中取消它们是多余的,没用。
我想要纠正的整个After
块应该只是被删除。
(Special thanks to this post by Myron Marston on the Rspec Google Group)