Ruby-Version: 2.6.6
Rails-Version: 6.1.0-rc2
RSpec-Version: 4.1.0.pre (Zweig 6-1-dev)
Das Ausführen von rspec löst einen Fehler aus:
NoMethodError:
undefined method `assert_nothing_raised' for #<RSpec::ExampleGroups::Test "fails" (./spec/test_spec.rb:5)>
Es sollte kein Fehler "undefinierte Methode" ausgelöst werden; es funktionierte bis Rails 6.0.3.4.
Erstellen Sie eine neue App und fügen Sie diese der Gemfile hinzu:
%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
Installieren:
bundle install
rails generate rspec:install
Prüfung hinzufügen:
# rspec/test_spec.rb
# frozen_string_literal: true
require "rails_helper"
RSpec.describe "test" do
it "fails" do
assert_nothing_raised()
end
end
Führen Sie die Tests durch:
bundle exec rspec spec/test_spec.rb
Gibt es einen Grund, https://relishapp.com/rspec/rspec-expectations/v/3-9/docs/built-in-matchers/raise-error-matcher nicht zu verwenden
expect { raise "oops" }.to raise_error
Ich habe das gleiche Problem, weil die Verwendung von ActiveJob::TestHelpers
diese Methode darunter verwendet:
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'
Was ist die beste Methode, um diese Funktionalität zu replizieren?
BEARBEITEN
Problemumgehung vorerst:
RSpec.configure do |config|
def assert_nothing_raised(&block)
expect(&block).to_not raise_error
end
end
Es hört sich so an, als ob das Modul, in dem es definiert ist, verschoben wurde, es gibt eine Reihe von Assertion-Modulen, die wir einbringen, um verschiedene Helfer zu unterstützen.
Die Methodendefinition befindet sich in ActiveSupport::Testing::Assertions .
Sie können es also auch umgehen, indem Sie:
RSpec.configure do |config|
config.include ActiveSupport::Testing::Assertions
end
@benoittgt Glaubst du, wir können das für 6.1 beheben?
Hilfreichster Kommentar
Die Methodendefinition befindet sich in ActiveSupport::Testing::Assertions .
Sie können es also auch umgehen, indem Sie: