alto/seatbelt

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# Seatbelt

[![Build Status](https://travis-ci.org/alto/seatbelt.svg?branch=master)](https://travis-ci.org/alto/seatbelt)
[![Code Climate](https://codeclimate.com/github/alto/seatbelt/badges/gpa.svg)](https://codeclimate.com/github/alto/seatbelt)

Seatbelt provides a number of custom, high-level assertions for Ruby and Ruby on Rails. The assertions work well with Ruby
[2.2.3](http://ruby-doc.org/core-2.2.3/).

## Installation

Add this line to your application's Gemfile:

    gem 'seatbelt'

And then execute:

    $ bundle

Or install it yourself as:

    $ gem install seatbelt

## Usage

### assert_json

Test your [JSON](http://www.json.org/) strings

```ruby
class MyActionTest < ActionController::TestCase
  include AssertJson

  def test_my_action
    get :my_action, :format => 'json'
    # => @response.body= '{"key":[{"inner_key1":"value1"},{"inner_key2":"value2"}]}'

    assert_json @response.body do
      has 'key' do
        has 'inner_key1', 'value1'
        has 'inner_key2', /lue2/
      end
      has_not 'key_not_included'
    end
  end

end
```

### assert_mail

Test your Rails [ActionMailer](http://guides.rubyonrails.org/action_mailer_basics.html) deliveries.

```ruby
class MyTest < Test::Unit::TestCase

  def test_mail
    this_sends_an_email
    assert_mail :to => 'recipient@email.com', :subject => 'the subject'
  end

  def test_with_block
    assert_mail :to => 'recipient@email.com', :subject => 'the subject' do
      assert_mail :to => 'another@email.com', :subject => 'used as regular expression' do
        this_sends_two_emails
      end
    end
  end

  def test_the_mail_body
    assert_mail :to => 'recipient@email.com', :body => ['part 1', 'part 2'] do
      this_sends_an_email
    end
  end

  def test_the_full_mail
    assert_mail :from     => 'sender@email.com',
                :to       => 'recipient@email.com',
                :cc       => 'cc@email.com',
                :bcc      => 'bcc@email.com',
                :subject  => 'subject',
                :body     => ['part 1', 'part 2'] do
      this_sends_an_email
    end
  end

  def test_crosscheck
    refute_mail do
      this_should_not_send_an_email
    end
  end

  def test_other_crosscheck
    assert_no_mail :to => 'dontwantemails@email.com' do
      this_should_not_send_an_email
    end
  end

end
```


## Changelog ##

Look at the [CHANGELOG](https://github.com/alto/seatbelt/blob/master/CHANGELOG.md) for details.

## Authors ##

  * [Thorsten Böttger](http://github.com/alto)

## How to contribute

1. Fork it
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Added some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create new Pull Request