Home

Awesome

Shoulda Context Gem Version Build Status Downloads Hound

Shoulda Context makes it easy to write understandable and maintainable tests under Minitest and Test::Unit within Rails projects or plain Ruby projects. It's fully compatible with your existing tests and requires no retooling to use.

Quick links

šŸ“– Read the documentation for the latest version. šŸ“¢ See what's changed in recent versions.

Getting started

If you're working on a Rails app, then make sure to add this gem to the test group in your Gemfile:

group :test do
  gem 'shoulda-context', '~> 3.0.0.rc1'
end

If you're not working on a Rails app, then you can simply add:

gem 'shoulda-context', '~> 3.0.0.rc1'

Then run bundle install.

Overview

Instead of writing Ruby methods with lots_of_underscores, Shoulda Context lets you name your tests and group them together using English.

At a minimum, the gem provides some convenience layers around core Minitest / Test::Unit functionality. For instance, this test case:

class CalculatorTest < Minitest::Test
  context "a calculator" do
    setup do
      @calculator = Calculator.new
    end

    should "add two numbers for the sum" do
      assert_equal 4, @calculator.sum(2, 2)
    end

    should "multiply two numbers for the product" do
      assert_equal 10, @calculator.product(2, 5)
    end
  end
end

turns into:

class CalculatorTest < Minitest::Test
  def setup
    @calculator = Calculator.new
  end

  define_method "test_: a calculator should add two numbers for the sum" do
    assert_equal 4, @calculator.sum(2, 2)
  end

  define_method "test_: a calculator should multiply two numbers for the product" do
    assert_equal 10, @calculator.product(2, 5)
  end
end

However, Shoulda Context also provides functionality apart from Minitest / Test::Unit that allows you to shorten tests drastically by making use of RSpec-compatible matchers. For instance, with Shoulda Matchers you can write such tests as:

class User < ActiveSupport::TestCase
  context "validations" do
    subject { FactoryBot.build(:user) }

    should validate_presence_of(:first_name)
    should validate_presence_of(:last_name)
    should validate_uniqueness_of(:email)
    should_not allow_value('weird').for(:email)
  end
end

API

DSL

The primary method in Shoulda Context's API is context, which declares a group of a tests.

These methods are available inside of a context:

These methods are available within a test case class, but outside of a context:

And these methods are available inside of a test (whether defined via a method or via should):

Assertions

In addition to the main API, the gem also provides some extra assertions that may be of use:

Compatibility

Shoulda Context is tested and supported against Ruby 2.7+, Rails 6.0+, Minitest 4.x, and Test::Unit 3.x.

Versioning

Shoulda Context follows Semantic Versioning 2.0 as defined at http://semver.org.

Team

Shoulda Context is currently maintained by Pedro Paiva. Previous maintainers include Elliot Winkler, Travis Jeffery, Gabe Berke-Williams, Ryan McGeary, Joe Ferris, Dan Croaky, and Tammer Saleh.

Copyright/License

Shoulda Context is copyright Ā© Tammer Saleh and thoughtbot, inc. It is free and opensource software and may be redistributed under the terms specified in the LICENSE file.

<!-- START /templates/footer.md -->

About thoughtbot

thoughtbot

This repo is maintained and funded by thoughtbot, inc. The names and logos for thoughtbot are trademarks of thoughtbot, inc.

We love open source software! See our other projects. We are available for hire.

<!-- END /templates/footer.md -->