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)
Ejecutar rspec genera un error:
NoMethodError:
undefined method `assert_nothing_raised' for #<RSpec::ExampleGroups::Test "fails" (./spec/test_spec.rb:5)>
No se debe generar ningún error de "método indefinido"; funcionó hasta Rails 6.0.3.4.
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
¿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?
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: