2014-07-06 16 views
34

In meinem Rails-Projekt I mit any_instance rspec-Mocks bin mit aber ich möchte diese deprecation Meldung vermeiden:RSpec any_instance deprecation: Wie wird es behoben?

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.

Hier ist meine Spezifikationen:

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 

Hier mein Controller ist:

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 

ich möchte die neu verwenden: erwarten Syntax aber ich kann nicht finden, wie man es richtig benutzt.

Ich verwende RSpec 3.0.2.

+0

was ist Ihre Rspec Version? –

+0

@ArupRakshit 3.0.2 – Rowandish

Antwort

79

Verwendung 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 
5

Ich bin in der Lage, es zu reproduzieren:

In meiner test.rb-Datei: -

#!/usr/bin/env ruby 

class Foo 
    def baz 
    11 
    end 
end 

In meiner test_spec.rb Datei

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 

Jetzt wenn ich laufe es: -

[email protected]:~/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)>'. 

Nun fand ich die changelog

allow(Klass.any_instance) und expect(Klass.any_instance) jetzt eine Warnung drucken. Dies ist normalerweise ein Fehler, und Benutzer möchten normalerweise allow_any_instance_of oder expect_any_instance_of stattdessen. (Sam Phippen)

ich ändern test_spec.rb wie folgt:

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 

und es funktioniert perfekt: -

[email protected]:~/Ruby> rspec 
. 

Finished in 0.01652 seconds (files took 0.74285 seconds to load) 
1 example, 0 failures 
[email protected]:~/Ruby> 
Verwandte Themen