mongoid-minitest ================ MiniTest matchers for Mongoid. [![Gem Version](http://img.shields.io/gem/v/mongoid-minitest.svg)](https://rubygems.org/gems/mongoid-minitest) [![Build Status](https://travis-ci.org/frodsan/mongoid-minitest.svg?branch=master)](http://travis-ci.org/frodsan/mongoid-minitest) [![Maintainability](https://api.codeclimate.com/v1/badges/a1e122b1599009eaad18/maintainability)](https://codeclimate.com/github/frodsan/mongoid-minitest/maintainability) Support ------- This gem supports: * Ruby 1.9.3, 2.0.0, ruby-head, rbx-19mode, jruby-19mode. * Mongoid ~>3.0, Mongoid 4.0 edge (Use mongoid/mongoid Github repository). * MiniTest ~>4.1. **NOTE:** Version 2.0.x will remove support for Mongoid 3.x. Installation ------------ Add this line to your application's Gemfile: ```ruby gem 'mongoid-minitest', group: :test ``` Depend on either [`minitest-matchers`](https://github.com/wojtekmach/minitest-matchers) or [`minitest-matchers_vaccine`](https://github.com/rmm5t/minitest-matchers_vaccine) by adding one to your application's Gemfile. ```ruby gem 'minitest-matchers', group: :test # - OR - # gem 'minitest-matchers_vaccine', group: :test ``` And then execute: $ bundle Or install it yourself as: $ gem install mongoid-minitest Usage ----- Require `mongoid-minitest` in your `test_helper.rb` or `spec_helper.rb` file: ```ruby require 'minitest/autorun' require 'mongoid' require 'mongoid-minitest' ``` Matchers are available at `Mongoid::Matchers` module. Setup matchers according to your testing preference: ### minitest/unit ```ruby class MiniTest::Unit::TestCase include Mongoid::Matchers end ``` ### minitest/spec ```ruby class MiniTest::Spec include Mongoid::Matchers end ``` See the following examples: ```ruby # minitest/unit class DummyTest < MiniTest::Unit::TestCase def test_matchers assert_must Dummy, have_field(:name) assert_wont Dummy, have_field(:none) end end # minitest/spec describe Dummy it "should test matchers" do Dummy.must have_field(:name) Dummy.wont have_field(:none) end end # minitest/spec with subject describe Dummy it { must have_field(:name) } it { wont have_field(:none) } end ``` Matchers -------- `Mongoid::Matchers` include the following modules: ```ruby Module Mongoid Module Matchers include Document include Associations include MiniTest::Matchers::ActiveModel end end ``` **NOTE:** [minitest-activemodel](https://github.com/frodsan/minitest-activemodel) gem is a dependency of this gem. ### Document Matchers ```ruby describe Mongoid::Matchers::Document do subject { Person } it { must be_document } # if model includes Mongoid::Document it { must be_paranoid } # if model includes Mongoid::Paranoia (Only in Mongoid <= 4.0.0) it { must be_versioned } # if model includes Mongoid::Versioning (Only in Mongoid <= 4.0.0) it { must be_timestamped } # if model includes Mongoid::Timestamps it { must be_stored_in(:people) } # checks the collection for model's document it { must have_field(:name) } it { must have_field(:name).of_type(String) } it { must have_field(:name).with_default_value("me") } it { must have_field(:name).of_type(String).with_default_value("me") } it { must have_fields(:name, :login) } it { must have_fields(:name, :login).of_type(String) } it { must have_fields(:name, :login).with_default_value("me") } it { must have_fields(:name, :login).of_type(String).with_default_value("me") } it { must have_index_for(:name) } it { must have_index_for(:account_id, :email) } end ``` ### Association Matchers ```ruby describe Mongoid::Matchers::Associations do describe Person do subject { Person } it { must have_one(:account) } it { must have_many(:pets).of_type(Pet) } it { must have_and_belong_to_many(:friends) } it { must embed_one(:profile) } it { must embed_many(:sites) } end describe Pet do subject { Pet } it { must belong_to(:person) } end describe Site do subject { Site } it { must embedded_in(:person) } end end ``` ### Validation Matchers Check [minitest-activemodel](https://github.com/frodsan/minitest-activemodel) gem for more information. Contributing ------------ 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. Unit Tests ---------- To run unit tests, run `rake test`. Maintainers ----------- * Francesco Rodriguez (https://github.com/frodsan/). * Sascha Wessel (https://github.com/gr4y). * Godfrey Chan (https://github.com/chancancode). * Ryan McGeary (https://github.com/rmm5t). License ------- MIT License. Copyright 2012 Francesco Rodriguez. See [LICENSE](LICENSE.md) for more information.