稍微引发错误异常 rspec 测试
bitly raise error exception rspec test
我正在尝试为 bitly raise 错误异常编写一个简单的 rspec 测试。我如何编写 expect 以匹配错误消息 ALREADY_A_BITLY_LINK - '500'
与 raise_error(BitlyError)
。这个rspec居然通过了。但是如果我对无效的 URL 使用相同的 raise_error。也会过去的。如何测试特定的异常消息?
bitly_spec.rb
require 'rails_helper'
describe Bitly do
before do
@bitly = Bitly.new(username, api_key)
end
let(:bitly_url) { 'bitly_url' } #Whosebug doesn't allow URL shortener
it 'should return exception error if given url is bitly' do
expect { @bitly.shorten(bitly_url) }.to raise_error(BitlyError)
end
end
调试器
@bitly.shorten(bitly_url)
returns *** BitlyError Exception: ALREADY_A_BITLY_LINK - '500'
raise_error(BitlyError)
returns #<RSpec::Matchers::BuiltIn::RaiseError:0x007fa229c56f48 @block=nil, @actual_error=nil, @warn_about_bare_error=false, @expected_error=BitlyError, @expected_message=nil>
正如您从文档中看到的那样 - https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers/raise-error-matcher - 引发错误匹配器可以采用字符串或正则表达式的第二个参数来匹配异常消息
expect { whatever }.to raise_error(BitlyError, "ALREADY_A_BITLY_LINK")
我正在尝试为 bitly raise 错误异常编写一个简单的 rspec 测试。我如何编写 expect 以匹配错误消息 ALREADY_A_BITLY_LINK - '500'
与 raise_error(BitlyError)
。这个rspec居然通过了。但是如果我对无效的 URL 使用相同的 raise_error。也会过去的。如何测试特定的异常消息?
bitly_spec.rb
require 'rails_helper'
describe Bitly do
before do
@bitly = Bitly.new(username, api_key)
end
let(:bitly_url) { 'bitly_url' } #Whosebug doesn't allow URL shortener
it 'should return exception error if given url is bitly' do
expect { @bitly.shorten(bitly_url) }.to raise_error(BitlyError)
end
end
调试器
@bitly.shorten(bitly_url)
returns *** BitlyError Exception: ALREADY_A_BITLY_LINK - '500'
raise_error(BitlyError)
returns #<RSpec::Matchers::BuiltIn::RaiseError:0x007fa229c56f48 @block=nil, @actual_error=nil, @warn_about_bare_error=false, @expected_error=BitlyError, @expected_message=nil>
正如您从文档中看到的那样 - https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers/raise-error-matcher - 引发错误匹配器可以采用字符串或正则表达式的第二个参数来匹配异常消息
expect { whatever }.to raise_error(BitlyError, "ALREADY_A_BITLY_LINK")