Rspec-rails: Rails 6.1.0-rc2μ—μ„œ μ •μ˜λ˜μ§€ μ•Šμ€ λ©”μ„œλ“œ "assert_nothing_raised"

에 λ§Œλ“  2020λ…„ 12μ›” 07일  Β·  5μ½”λ©˜νŠΈ  Β·  좜처: rspec/rspec-rails

μ–΄λ–€ Ruby, Rails 및 RSpec 버전을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

루비 버전: 2.6.6
레일즈 버전: 6.1.0-rc2
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)>

μ˜ˆμƒλ˜λŠ” 행동

"μ •μ˜λ˜μ§€ μ•Šμ€ λ©”μ„œλ“œ" 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€. Rails 6.0.3.4κΉŒμ§€ μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€.

예제 앱을 μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

μƒˆ 앱을 λ§Œλ“€κ³  λ‹€μŒμ„ 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 λ“±κΈ‰