Rspec-rails: طريقة غير محددة "assert_nothing_raised" مع Rails 6.1.0-rc2

تم إنشاؤها على ٧ ديسمبر ٢٠٢٠  ·  5تعليقات  ·  مصدر: rspec/rspec-rails

ما إصدارات Ruby و Rails و RSpec التي تستخدمها؟

إصدار روبي: 2.6.6
إصدار القضبان: 6.1.0-rc2.0
إصدار RSpec: 4.1.0.pre (الفرع 6-1-dev)

السلوك المرصود

يؤدي تشغيل rspec إلى حدوث خطأ:

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

سلوك متوقع

يجب عدم ظهور خطأ "أسلوب غير محدد" ؛ عملت حتى الإصدار 6.0.3.4 من Rails.

هل يمكنك تقديم مثال للتطبيق؟

أنشئ تطبيقًا جديدًا وأضفه إلى ملف 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

تثبيت:

bundle install
rails generate rspec:install

أضف اختبارًا:

# rspec/test_spec.rb

# frozen_string_literal: true
require "rails_helper"

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

قم بإجراء الاختبارات:

bundle exec rspec spec/test_spec.rb

التعليق الأكثر فائدة

يوجد تعريف الطريقة في ActiveSupport :: Testing :: Assertions .

لذلك يمكنك أيضًا التغلب عليها من خلال:

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

ال 5 كومينتر

أي سبب لعدم استخدام https://relishapp.com/rspec/rspec-expectations/v/3-9/docs/built-in-matchers/raise-error-matcher؟

  expect { raise "oops" }.to raise_error

لدي نفس المشكلة ، لأن استخدام ActiveJob::TestHelpers يستخدم هذه الطريقة أسفل:

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'

ما هي أفضل طريقة لتكرار هذه الوظيفة؟

تعديل

الحل الآن:

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

يبدو أن الوحدة النمطية التي تم تعريفها بها قد تم نقلها ، فهناك مجموعة من وحدات التأكيد التي نجلبها لدعم مختلف المساعدين.

يوجد تعريف الطريقة في ActiveSupport :: Testing :: Assertions .

لذلك يمكنك أيضًا التغلب عليها من خلال:

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

benoittgt هل تعتقد أنه يمكننا إصلاح هذا لـ 6.1؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات