crotest
crotest
A tiny and simple test framework for Crystal with common assertions and no pollution into Object
class.
NOTE: This library was built during the Citrusybte's Investment Day program
Example
require "crotest"
describe "DSL" do
it "defines small test cases" do
assert true
end
describe "nested describes for a better readability" do
it "has only a few assertions" do
var = false
deny var
assert_equal false, var
assert_raise Exception do
raise Exception.new("Boom!")
end
end
end
pending "tests are defined without a block"
pending "tests can also be defined with a block, which will not be executed" do
fail "This won't be executed :)"
end
end
Installation
Add this to your application's shard.yml
:
dependencies:
crotest:
github: emancu/crotest
Usage
require "crotest"
Run your tests with crystal spec
.
Assertions
assert
deny
assert_equal
assert_raise
Custom assertions
Extend the assertions used by Crotest
is really easy.
You need to open the module Crotest::Assertions
and add your assertions like the example below:
require "crotest"
module Crotest::Assertions
macro assert_greater_than_4(value, file = __FILE__, line = __LINE__)
assert {{value}} > 4, "#{{{value}}} <= 4", {{file}}, {{line}}
end
end
it "supports my custom assertion" do
assert_greater_than_4 5
end
Before/After blocks
If you need to run code before or after each test, declare each block like in the example below.
Remember to define before/after
blocks before the corresponding it
blocks.
Given this is not dynamically evaluated, we must define at the beginning of the file or describe
block.
before do
# First block to be executed
end
after do
# Fifth and last block to be executed
end
describe "a nested context" do
before do
# Second block to be executed
end
after do
# Fourth block to be executed
end
it "executes the before blocks and" do
# Third block to be executed
end
end
Contributing
- Fork it ( https://github.com/emancu/crotest/fork )
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create a new Pull Request
Contributors
- emancu Emiliano Mancuso - creator, maintainer