RSpec any_instance deprecation:如何解决它?

在我的Rails项目中,我使用any_instance使用rspec-mocks,但是我想避免这个弃用消息:

Using any_instance from rspec-mocks' old :should syntax without explicitly enabling the syntax is deprecated. Use the new :expect syntax or explicitly enable :should instead.

这是我的规格:

 describe (".create") do it 'should return error when...' do User.any_instance.stub(:save).and_return(false) post :create, user: {name: "foo", surname: "bar"}, format: :json expect(response.status).to eq(422) end end 

这是我的控制器:

 def create @user = User.create(user_params) if @user.save render json: @user, status: :created, location: @user else render json: @user.errors, status: :unprocessable_entity end end 

我想使用新的:expect语法,但我找不到如何正确使用它。

我正在使用RSpec 3.0.2

使用allow_any_instance_of

 describe (".create") do it 'returns error when...' do allow_any_instance_of(User).to receive(:save).and_return(false) post :create, user: {name: "foo", surname: "bar"}, format: :json expect(response.status).to eq(422) end end 

我能够重现它:

在我的test.rb文件中: –

 #!/usr/bin/env ruby class Foo def baz 11 end end 

在我的test_spec.rb文件中

 require_relative "../test.rb" describe Foo do it "invokes #baz" do Foo.any_instance.stub(:baz).and_return(20) expect(subject.baz).to eq(20) end end 

现在如果我运行它:

 arup@linux-wzza:~/Ruby> rspec . Deprecation Warnings: Using `any_instance` from rspec-mocks' old `:should` syntax without explicitly enabling the syntax is deprecated. Use the new `:expect` syntax or explicitly enable `:should` instead. Called from /home/arup/Ruby/spec/test_spec.rb:4:in `block (2 levels) in <top (required)>'. 

现在,我find了更新日志

allow(Klass.any_instance)expect(Klass.any_instance)打印警告 。 这通常是一个错误 ,用户通常需要allow_any_instance_ofexpect_any_instance_of来代替。 ( Sam Phippen

我改变test_spec.rb如下:

 require_relative "../test.rb" describe Foo do it "invokes #baz" do expect_any_instance_of(Foo).to receive(:baz).and_return(20) expect(subject.baz).to eq(20) end end 

它完美的作品: –

 arup@linux-wzza:~/Ruby> rspec . Finished in 0.01652 seconds (files took 0.74285 seconds to load) 1 example, 0 failures arup@linux-wzza:~/Ruby>