Rspec-rails: Método no definido "assert_nothing_raised" con Rails 6.1.0-rc2

Creado en 7 dic. 2020  ·  5Comentarios  ·  Fuente: rspec/rspec-rails

¿Qué versiones de Ruby, Rails y RSpec estás usando?

Versión Rubí: 2.6.6
Versión de rieles: 6.1.0-rc2
Versión RSpec: 4.1.0.pre (rama 6-1-dev)

Comportamiento observado

Ejecutar rspec genera un error:

NoMethodError:
       undefined method `assert_nothing_raised' for #<RSpec::ExampleGroups::Test "fails" (./spec/test_spec.rb:5)>

Comportamiento esperado

No se debe generar ningún error de "método indefinido"; funcionó hasta Rails 6.0.3.4.

¿Puede proporcionar una aplicación de ejemplo?

Cree una nueva aplicación y agréguela al Gemfile:

%w[rspec rspec-core rspec-expectations rspec-mocks rspec-support].each do |lib|
  gem lib, git: "https://github.com/rspec/#{lib}.git", branch: "main"
end
git "https://github.com/rspec/rspec-rails", branch: "rails-6-1-dev" do
  gem "rspec-rails"
end

Instalar en pc:

bundle install
rails generate rspec:install

Añadir una prueba:

# rspec/test_spec.rb

# frozen_string_literal: true
require "rails_helper"

RSpec.describe "test" do
  it "fails" do
    assert_nothing_raised()
  end
end

Ejecute las pruebas:

bundle exec rspec spec/test_spec.rb

Comentario más útil

La definición del método se encuentra en ActiveSupport::Testing::Assertions .

Por lo tanto, también puede solucionarlo de la siguiente manera:

RSpec.configure do |config|
  config.include ActiveSupport::Testing::Assertions
end

Todos 5 comentarios

¿Alguna razón para no usar https://relishapp.com/rspec/rspec-expectations/v/3-9/docs/built-in-matchers/raise-error-matcher?

  expect { raise "oops" }.to raise_error

Tengo el mismo problema, porque usar ActiveJob::TestHelpers usa ese método debajo:

RSpec.describe do
  include ActiveJob::TestHelper
  it 'works' do
    perform_enqueued_jobs do
      SomeService.doSomething
    end
  end
end
       NoMethodError:
         undefined method `assert_nothing_raised' for #<RSpec::ExampleGroups::xxxx:0x0000559e7b2a3018>
         Did you mean?  assert_raises
       # .../gems/rspec-expectations-3.10.0/lib/rspec/matchers.rb:965:in `method_missing'
       # .../gems/rspec-core-3.10.0/lib/rspec/core/example_group.rb:764:in `method_missing'
       # .../gems/activejob-6.1.0.rc2/lib/active_job/test_helper.rb:591:in `perform_enqueued_jobs'

¿Cuál es el mejor método para replicar esa funcionalidad?

EDITAR

Solución por ahora:

RSpec.configure do |config|
   def assert_nothing_raised(&block)
      expect(&block).to_not raise_error
   end
end

Parece que el módulo en el que está definido se ha movido, hay un montón de módulos de aserción que traemos para admitir varios ayudantes.

La definición del método se encuentra en ActiveSupport::Testing::Assertions .

Por lo tanto, también puede solucionarlo de la siguiente manera:

RSpec.configure do |config|
  config.include ActiveSupport::Testing::Assertions
end

@benoittgt ¿Crees que podemos arreglar esto para 6.1?

¿Fue útil esta página
0 / 5 - 0 calificaciones