RSpec any_instance deprecation: how to fix it?

后端 未结 2 836
醉话见心
醉话见心 2021-02-03 17:32

In my Rails project I\'m using rspec-mocks using any_instance but I want to avoid this deprecation message:

Using any_instance from rspec-mocks\' old :should synta

相关标签:
2条回答
  • 2021-02-03 17:53

    I am able to reproduce it :

    In my test.rb file :-

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

    In my test_spec.rb file

    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
    

    Now If I run it :-

    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)>'.
    

    Now, I found the changelog

    allow(Klass.any_instance) and expect(Klass.any_instance) now print a warning. This is usually a mistake, and users usually want allow_any_instance_of or expect_any_instance_of instead. (Sam Phippen)

    I change test_spec.rb as below :

    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
    

    and it works perfectly :-

    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>
    
    0 讨论(0)
  • 2021-02-03 18:11

    Use 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
    
    0 讨论(0)
提交回复
热议问题