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)
yexpect(Klass.any_instance)
ahora imprimen una advertencia . Esto generalmente es un error , y los usuarios generalmente quierenallow_any_instance_of
oexpect_any_instance_of
enexpect_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