Oktobertest
Small test library.
Why?
This is a project I started over the weekend. I was looking at Cutest and I thought: "It shouldn't be so difficult to make a test library".
Features
- Setup - Test - Teardown model.
- Each
testis an instance ofOktobertest::Test, which means that each test runs its own context. - Each
scopeis an instance ofOktobertest::Scope. Methods defined in a scope are copied into eachtestit contains. - Extensible: it's easy to add more assertions (See oktobertest-contrib).
Installation
Add this line to your application's Gemfile:
gem 'oktobertest', group: :test
# or this if you want to use oktobertest master
# gem 'oktobertest', group: :test, github: 'patriciomacadden/oktobertest'And then execute:
$ bundleOr install it yourself as:
$ gem install oktobertestUsage
Example
scope do
setup do
@foo = 'foo'
end
test 'this test will pass' do
assert @foo == 'foo'
end
test 'this test will pass too' do
assert_raises RuntimeError do
raise RuntimeError
end
end
test 'this test will fail' do
flunk 'fail!'
end
test 'skip this one!' do
skip
end
endAssertions
For now there are 2 assertions:
-
assert: fails unless the given condition is true. -
assert_raises: fails unless the given block raises the given exception.
And there is a way of making tests fail (flunk) and skipping them (skip).
How to add assertions?
That's quite simple. Just define them in the Oktobertest::Assertions module:
module Oktobertest
module Assertions
def assert_equal(expected, actual, message = nil)
message ||= "#{expected.inspect} is not equal to #{actual.inspect}"
assert expected == actual, message
end
end
endRunning a test suite
You can run a test suite using rake or ruby.
Using rake:
require 'rake/testtask'
Rake::TestTask.new do |t|
t.libs << 'test'
t.pattern = 'test/*_test.rb'
end
task default: :testUsing ruby:
$ ruby -r oktobertest test/*_test.rbWhen using ruby directly, you can specify the scope (S) or the test
(T) to run:
$ T='test this' ruby -r oktobertest test/*_test.rbTesting Rack applications
Pretty simple:
require 'rack/test'
module Oktobertest
class Test
include Rack::Test::Methods
def app
Proc.new { |env| [200, {}, ['hello world']] }
end
end
end
scope 'rack app' do
test 'GET /' do
get '/'
assert last_response.status == 200
end
endContributing
- Fork it
- 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 new Pull Request
License
See the LICENSE.