mirror of
https://gitea.invidious.io/iv-org/shard-spectator.git
synced 2024-08-15 00:53:35 +00:00
Implemented should-syntax
This commit is contained in:
parent
83a2a8e238
commit
e9b8992130
2 changed files with 38 additions and 1 deletions
|
@ -93,7 +93,7 @@ In no particular order, features that have been implemented and are planned:
|
||||||
- [X] Before and after hooks - `before_each`, `before_all`, `after_each`, `after_all`, `around_each`
|
- [X] Before and after hooks - `before_each`, `before_all`, `after_each`, `after_all`, `around_each`
|
||||||
- [ ] Other hooks - `on_success`, `on_failure`, `on_error`
|
- [ ] Other hooks - `on_success`, `on_failure`, `on_error`
|
||||||
- [ ] One-liner syntax
|
- [ ] One-liner syntax
|
||||||
- [ ] Should syntax
|
- [X] Should syntax - `should`, `should_not`
|
||||||
- [X] Helper methods and modules
|
- [X] Helper methods and modules
|
||||||
- [ ] Aliasing - custom example group types with preset attributes
|
- [ ] Aliasing - custom example group types with preset attributes
|
||||||
- [X] Pending tests - `pending`
|
- [X] Pending tests - `pending`
|
||||||
|
|
37
src/spectator/should.cr
Normal file
37
src/spectator/should.cr
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
class Object
|
||||||
|
# Extension method to create an expectation for an object.
|
||||||
|
# This is part of the spec DSL and mimics Crystal Spec's default should-syntax.
|
||||||
|
# A matcher should immediately follow this method, or be the only argument to it.
|
||||||
|
# Example usage:
|
||||||
|
# ```
|
||||||
|
# it "equals the expected value" do
|
||||||
|
# subject.should eq(42)
|
||||||
|
# end
|
||||||
|
# ```
|
||||||
|
#
|
||||||
|
# NOTE: By default, the should-syntax is disabled.
|
||||||
|
# The expect-syntax is preferred,
|
||||||
|
# since it doesn't [monkey-patch](https://en.wikipedia.org/wiki/Monkey_patch) all objects.
|
||||||
|
# To enable should-syntax, add the following to your `spec_helper.cr` file:
|
||||||
|
# ```
|
||||||
|
# require "spectator/should"
|
||||||
|
# ```
|
||||||
|
def should(matcher : ::Spectator::Matchers::Matcher)
|
||||||
|
# First argument of the `Expectation` initializer is the expression label.
|
||||||
|
# However, since this isn't a macro and we can't "look behind" this method call
|
||||||
|
# to see what it was invoked on, the argument is an empty string.
|
||||||
|
expectation = ::Spectator::Expectation.new("", self)
|
||||||
|
unless matcher.match?(expectation)
|
||||||
|
raise ::Spectator::ExpectationFailed.new(matcher.message(expectation))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Works the same as `#should` except the condition is inverted.
|
||||||
|
# When `#should` succeeds, this method will fail, and vice-versa.
|
||||||
|
def should_not(matcher : ::Spectator::Matchers::Matcher)
|
||||||
|
expectation = ::Spectator::Expectation.new("", self)
|
||||||
|
if matcher.match?(expectation)
|
||||||
|
raise ::Spectator::ExpectationFailed.new(matcher.message(expectation))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue