Forum: Ruby [ANN] (testing/bdd) Speccify, the lightweight option

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
4afe6410564deb5174ebf01206df4ea3?d=identicon&s=25 Matthias Hennemeyer (mhennemeyer)
on 2009-02-04 20:55
Hi!
I'm proud to release
Speccify, the lightweight option.

Please TRY IT OUT!

Website: http://speccify.rubyforge.org

1. Get it:
$ sudo gem install speccify

2. Use it:
require 'rubygems'
require 'speccify'
# GO

3. Love it:
Speccify is a complete Testing/BDD Framework that
provides everything that actually matters.

Features:

* Nested Contexts
* Custom matchers are no-brainers with def_matcher()
* Fast
* 100% Ruby 1.9 and 1.8 compatible
* Rails out of the box!
* Sophisticated Expectations/Matchers System
* < 300 LOC (sans rdoc)
* Near Future: Rails Generators, TM-Bundle

Speccify has no dependencies outside standard ruby, iterops with
test/unit and minitest without issues and generally behaves like
a good citizen.

Speccify has a strong opinion of what actually not matters:

* /spec directory instead of /test
* whatever_spec.rb instead of whatever_test.rb
* custom formatters
* custom runners
* html output or any special formatted output
* special commandline tools
* shared example groups
* pending examples
* before_all, after_all, before_suite, after_suite


Some Examples:

1. Plain:

# test_object.rb

       require "rubygems"
       require "speccify"

       describe Object do
         before do
           @obj = Object.new
         end

         it "is not nil" do
           @obj.should_not be_nil
         end

         it "can be frozen" do
           @obj.freeze
           @obj.should be_frozen
         end
       end


2. Rails ActionMailer Test:

describe MyMailer, :type => ActionMailer::TestCase do

  before do
    @expected.subject = 'MyMailer#confirm'
    @expected.body    = read_fixture('confirm')
    @expected.date    = Time.now
  end

  it "sends confirm mail" do
    MyMailer.create_confirm(@expected.date).encoded.should
eql(@expected.encoded)
  end

  describe "nested context" do
    it "still sends confirm mail" do
      MyMailer.create_confirm(@expected.date).encoded.should
eql(@expected.encoded)
    end
  end
end


3. Rails Performance Test:

require 'performance_test_help'

describe "Browsing", :type => ActionController::PerformanceTest do
  it "get homepage" do
    get '/'
  end
end

4. Create a custom Matcher:

def_matcher :be_smart do |given, matcher, args|
  !given.dumb?
end
obj.should be_smart
# passes if obj.dumb? # => false


You can create the most sophisticated matchers with def_matcher().
Method chaining like with rspecs change matcher:
lambda {do_something}.should change {something}.from(undone).to(done)
is really not a big deal with speccify. (See:
http://speccify.rubyforge.org/matchers.html)

Browse the site: http://speccify.rubyforge.org ,
skim the docs: http://speccify.rubyforge.org/doc/index.html
and feel free mail me with any questions or whatever:
mailto:mhennemeyer@gmail.com

Thanks
Matthias
This topic is locked and can not be replied to.