tests test run rails how example better ruby-on-rails ruby testing rspec

ruby on rails - test - RSpec any_instance deprecation: ¿cómo solucionarlo?



rspec rails 5 (2)

Puedo reproducirlo:

En mi archivo test.rb: -

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

En mi archivo 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

Ahora si lo ejecuto: -

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

Ahora, encontré el changelog

allow(Klass.any_instance) y expect(Klass.any_instance) ahora imprimen una advertencia . Esto generalmente es un error , y los usuarios generalmente quieren allow_any_instance_of o expect_any_instance_of en expect_any_instance_of lugar. ( Sam Phippen )

Cambio test_spec.rb como a continuación:

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

y funciona perfectamente: -

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>

En mi proyecto Rails estoy usando rspec-mocks usando any_instance, pero quiero evitar este mensaje de desaprobación:

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.

Aquí están mis especificaciones:

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

Aquí está mi controlador:

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

Me gustaría usar la nueva sintaxis: expect pero no puedo encontrar cómo usarla correctamente.

Estoy usando RSpec 3.0.2 .


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