[ruby-on-rails] 어떤 종류의 예외와 함께 RSpec의 should_raise를 사용하는 방법?
나는 이런 식으로하고 싶다 :
some_method.should_raise <any kind of exception, I don't care>
어떻게해야합니까?
some_method.should_raise exception
… 작동하지 않습니다.
답변
expect { some_method }.to raise_error
RSpec 1 구문 :
lambda { some_method }.should raise_error
자세한 내용 은 설명서 (RSpec 1 구문) 및 RSpec 2 설명서 를 참조하십시오.
답변
RSpec 2
expect { some_method }.to raise_error
expect { some_method }.to raise_error(SomeError)
expect { some_method }.to raise_error("oops")
expect { some_method }.to raise_error(/oops/)
expect { some_method }.to raise_error(SomeError, "oops")
expect { some_method }.to raise_error(SomeError, /oops/)
expect { some_method }.to raise_error(...){|e| expect(e.data).to eq "oops" }
# Rspec also offers to_not:
expect { some_method }.to_not raise_error
...
참고 : raise_error
및 raise_exception
교환 할 수있다.
RSpec 1
lambda { some_method }.should raise_error
lambda { some_method }.should raise_error(SomeError)
lambda { some_method }.should raise_error(SomeError, "oops")
lambda { some_method }.should raise_error(SomeError, /oops/)
lambda { some_method }.should raise_error(...){|e| e.data.should == "oops" }
# Rspec also offers should_not:
lambda { some_method }.should_not raise_error
...
참고 : raise_error
의 별칭입니다 raise_exception
.
설명서 : https://www.relishapp.com/rspec
RSpec 2 :
- https://www.relishapp.com/rspec/rspec-expectations/v/2-13/docs/built-in-matchers/raise-error-matcher
RSpec 1 :
답변
람다 대신 다음을 사용하십시오.
expect { some_method }.to raise_error
이는 최신 rspec 버전, 즉 rspec 2.0 이상에 적용됩니다.
자세한 내용은 도코 를 참조하십시오 .
답변
구문은 최근에 바뀌 었으며 현재는 다음과 같습니다.
expect { ... }.to raise_error(ErrorClass)
답변
rspec-expections
gem의 3.3 버전부터 매개 변수없이 공백 raise_error에 대한 경고가 발생합니다.
expect { raise StandardError }.to raise_error # results in warning
expect { raise StandardError }.to raise_error(StandardError) # fine
이렇게하면 검사하려는 테스트와 다른 오류로 코드가 실패 할 수 있다는 힌트를 얻을 수 있습니다.
경고 : 사용
raise_error
정규 표현을 특정 오류 또는 메시지를 제공하지 않고 이후, 오탐 (false positive) 위험raise_error
루비가 제기 될 때 일치NoMethodError
,NameError
또는ArgumentError
잠재적으로 기대도 당신이 전화하고자하는 방법을 실행하지 않고 통과 할 수 있도록. 대신 특정 오류 클래스 또는 메시지를 제공하십시오. 이 메시지는 다음을 설정하여 억제 할 수 있습니다RSpec::Expectations.configuration.warn_about_potential_false_positives = false
.