Last active
August 12, 2022 19:42
-
-
Save SirRawlins/8956101 to your computer and use it in GitHub Desktop.
RSpec url matcher.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Drop this into /spec/support/matchers | |
# Usage: result.should be_url | |
# Passes if result is a valid url, returns error "expected result to be url" if not. | |
# Matcher to see if a string is a URL or not. | |
RSpec::Matchers.define :be_url do |expected| | |
# The match method, returns true if valie, false if not. | |
match do |actual| | |
# Use the URI library to parse the string, returning false if this fails. | |
URI.parse(actual) rescue false | |
end | |
end |
I'm using ruby 2.5.5 and it's returning a URI::Generic instead of raising an exception, so I implemented it like the following:
RSpec::Matchers.define :be_url do |expected|
match do |actual|
actual =~ URI::regexp
end
end
Am I the only one that prefers be_a_url
instead of be_url
?
Maybe it's because there is already be_a( Hash )
, etc.
Thoughts?
Also, ESLint was whining about the unused block variable, expected
and URI:regexp
being obsolet. It preferred the following:
RSpec::Matchers.define :be_a_url do
match do |actual|
actual =~ URI::DEFAULT_PARSER.make_regexp
end
end
Thanks for the matcher.
It would be nice if implemented in rspec project directly.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Nice matcher.
You should probably avoid rescuing all exceptions though, it's generally bad practice.
You could do