2014-10-21 03:50:09 -04:00
|
|
|
# shoulda-matchers [![Gem Version][version-badge]][rubygems] [![Build Status][travis-badge]][travis] ![Downloads][downloads-badge]
|
2012-03-09 11:57:31 -05:00
|
|
|
|
2013-10-23 15:27:08 -04:00
|
|
|
[Official Documentation][rubydocs]
|
2012-03-09 11:57:31 -05:00
|
|
|
|
2013-10-23 15:27:08 -04:00
|
|
|
shoulda-matchers provides Test::Unit- and RSpec-compatible one-liners that test
|
|
|
|
common Rails functionality. These tests would otherwise be much longer, more
|
|
|
|
complex, and error-prone.
|
2012-03-09 11:57:31 -05:00
|
|
|
|
2015-03-08 10:24:52 -04:00
|
|
|
Thank you to all the [contributors][contributors].
|
|
|
|
|
2014-01-23 13:07:36 -05:00
|
|
|
### ActiveModel Matchers
|
|
|
|
|
2014-06-21 19:28:47 -04:00
|
|
|
* **[allow_mass_assignment_of](lib/shoulda/matchers/active_model/allow_mass_assignment_of_matcher.rb)**
|
2014-01-23 13:07:36 -05:00
|
|
|
tests usage of Rails 3's `attr_accessible` and `attr_protected` macros.
|
2014-11-18 08:12:20 -05:00
|
|
|
* **[allow_value](lib/shoulda/matchers/active_model/allow_value_matcher.rb)**
|
|
|
|
tests usage of the `validates_format_of` validation.
|
|
|
|
* **[have_secure_password](lib/shoulda/matchers/active_model/have_secure_password_matcher.rb)**
|
|
|
|
tests usage of `has_secure_password`.
|
2014-06-21 19:28:47 -04:00
|
|
|
* **[validate_confirmation_of](lib/shoulda/matchers/active_model/validate_confirmation_of_matcher.rb)**
|
2014-01-23 13:07:36 -05:00
|
|
|
tests usage of `validates_confirmation_of`.
|
2014-11-18 08:12:20 -05:00
|
|
|
* **[validate_exclusion_of](lib/shoulda/matchers/active_model/validate_exclusion_of_matcher.rb)**
|
|
|
|
tests usage of `validates_exclusion_of`.
|
|
|
|
* **[validate_inclusion_of](lib/shoulda/matchers/active_model/validate_inclusion_of_matcher.rb)**
|
|
|
|
tests usage of `validates_inclusion_of`.
|
|
|
|
* **[validate_length_of](lib/shoulda/matchers/active_model/validate_length_of_matcher.rb)**
|
|
|
|
tests usage of `validates_length_of`.
|
2014-06-21 19:28:47 -04:00
|
|
|
* **[validate_numericality_of](lib/shoulda/matchers/active_model/validate_numericality_of_matcher.rb)**
|
2014-01-23 13:07:36 -05:00
|
|
|
tests usage of `validates_numericality_of`.
|
2014-11-18 08:12:20 -05:00
|
|
|
* **[validate_presence_of](lib/shoulda/matchers/active_model/validate_presence_of_matcher.rb)**
|
|
|
|
tests usage of `validates_presence_of`.
|
2014-01-23 13:07:36 -05:00
|
|
|
|
|
|
|
### ActiveRecord Matchers
|
|
|
|
|
2014-06-21 19:28:47 -04:00
|
|
|
* **[accept_nested_attributes_for](lib/shoulda/matchers/active_record/accept_nested_attributes_for_matcher.rb)**
|
2014-01-23 13:07:36 -05:00
|
|
|
tests usage of the `accepts_nested_attributes_for` macro.
|
2014-11-18 08:12:20 -05:00
|
|
|
* **[belong_to](lib/shoulda/matchers/active_record/association_matcher.rb)**
|
|
|
|
tests your `belongs_to` associations.
|
2014-08-28 12:55:52 -04:00
|
|
|
* **[define_enum_for](lib/shoulda/matchers/active_record/define_enum_for_matcher.rb)**
|
|
|
|
tests usage of the `enum` macro.
|
2014-06-21 19:28:47 -04:00
|
|
|
* **[have_and_belong_to_many](lib/shoulda/matchers/active_record/association_matcher.rb)**
|
2014-01-23 13:07:36 -05:00
|
|
|
tests your `has_and_belongs_to_many` associations.
|
2014-11-18 08:12:20 -05:00
|
|
|
* **[have_db_column](lib/shoulda/matchers/active_record/have_db_column_matcher.rb)**
|
|
|
|
tests that the table that backs your model has a specific column.
|
|
|
|
* **[have_db_index](lib/shoulda/matchers/active_record/have_db_index_matcher.rb)**
|
|
|
|
tests that the table that backs your model has an index on a specific column.
|
|
|
|
* **[have_many](lib/shoulda/matchers/active_record/association_matcher.rb)**
|
|
|
|
tests your `has_many` associations.
|
|
|
|
* **[have_one](lib/shoulda/matchers/active_record/association_matcher.rb)**
|
|
|
|
tests your `has_one` associations.
|
2014-06-21 19:28:47 -04:00
|
|
|
* **[have_readonly_attribute](lib/shoulda/matchers/active_record/have_readonly_attribute_matcher.rb)**
|
2014-01-23 13:07:36 -05:00
|
|
|
tests usage of the `attr_readonly` macro.
|
2014-11-18 08:12:20 -05:00
|
|
|
* **[serialize](lib/shoulda/matchers/active_record/serialize_matcher.rb)** tests
|
|
|
|
usage of the `serialize` macro.
|
2014-12-08 13:15:46 -05:00
|
|
|
* **[validate_uniqueness_of](lib/shoulda/matchers/active_record/validate_uniqueness_of_matcher.rb)**
|
|
|
|
tests usage of `validates_uniqueness_of`.
|
2014-01-23 13:07:36 -05:00
|
|
|
|
|
|
|
### ActionController Matchers
|
|
|
|
|
2014-11-18 08:12:20 -05:00
|
|
|
* **[filter_param](lib/shoulda/matchers/action_controller/filter_param_matcher.rb)**
|
|
|
|
tests parameter filtering configuration.
|
2015-02-28 21:32:09 -05:00
|
|
|
* **[permit](lib/shoulda/matchers/action_controller/permit_matcher.rb)** tests
|
|
|
|
that an action places a restriction on the `params` hash.
|
2014-11-18 08:12:20 -05:00
|
|
|
* **[redirect_to](lib/shoulda/matchers/action_controller/redirect_to_matcher.rb)**
|
|
|
|
tests that an action redirects to a certain location.
|
|
|
|
* **[render_template](lib/shoulda/matchers/action_controller/render_template_matcher.rb)**
|
|
|
|
tests that an action renders a template.
|
|
|
|
* **[render_with_layout](lib/shoulda/matchers/action_controller/render_with_layout_matcher.rb)**
|
|
|
|
tests that an action is rendered with a certain layout.
|
|
|
|
* **[rescue_from](lib/shoulda/matchers/action_controller/rescue_from_matcher.rb)**
|
|
|
|
tests usage of the `rescue_from` macro.
|
|
|
|
* **[respond_with](lib/shoulda/matchers/action_controller/respond_with_matcher.rb)**
|
|
|
|
tests that an action responds with a certain status code.
|
|
|
|
* **[route](lib/shoulda/matchers/action_controller/route_matcher.rb)** tests
|
|
|
|
your routes.
|
|
|
|
* **[set_session](lib/shoulda/matchers/action_controller/set_session_matcher.rb)**
|
|
|
|
makes assertions on the `session` hash.
|
2014-12-04 02:28:01 -05:00
|
|
|
* **[set_flash](lib/shoulda/matchers/action_controller/set_flash_matcher.rb)**
|
2014-11-18 08:12:20 -05:00
|
|
|
makes assertions on the `flash` hash.
|
2015-03-26 16:46:03 -04:00
|
|
|
* **[use_after_action](lib/shoulda/matchers/action_controller/callback_matcher.rb#L79)**
|
2015-01-20 01:23:53 -05:00
|
|
|
tests that a `after_action` callback is defined in your controller. (Aliased
|
|
|
|
as *use_after_filter*.)
|
2015-03-26 16:46:03 -04:00
|
|
|
* **[use_around_action](lib/shoulda/matchers/action_controller/callback_matcher.rb#L129)**
|
2015-01-20 01:23:53 -05:00
|
|
|
tests that a `around_action` callback is defined in your controller. (Aliased
|
|
|
|
as *use_around_filter*.)
|
2015-03-26 16:46:03 -04:00
|
|
|
* **[use_before_action](lib/shoulda/matchers/action_controller/callback_matcher.rb#L54)**
|
2015-01-20 01:23:53 -05:00
|
|
|
tests that a `before_action` callback is defined in your controller. (Aliased
|
|
|
|
as *use_before_filter*.)
|
2014-01-23 13:07:36 -05:00
|
|
|
|
2014-07-18 20:05:22 -04:00
|
|
|
### Independent Matchers
|
|
|
|
|
2014-10-02 17:58:20 -04:00
|
|
|
* **[delegate_method](lib/shoulda/matchers/independent/delegate_method_matcher.rb)**
|
2014-07-18 20:05:22 -04:00
|
|
|
tests that an object forwards messages to other, internal objects by way of
|
|
|
|
delegation.
|
|
|
|
|
2013-10-23 15:27:08 -04:00
|
|
|
## Installation
|
|
|
|
|
2014-01-10 20:36:52 -05:00
|
|
|
### RSpec
|
|
|
|
|
|
|
|
Include the gem in your Gemfile:
|
2013-10-23 15:27:08 -04:00
|
|
|
|
2014-06-19 23:50:37 -04:00
|
|
|
``` ruby
|
2013-10-23 15:27:08 -04:00
|
|
|
group :test do
|
2014-06-19 23:50:37 -04:00
|
|
|
gem 'shoulda-matchers', require: false
|
2013-10-23 15:27:08 -04:00
|
|
|
end
|
|
|
|
```
|
2012-03-09 11:57:31 -05:00
|
|
|
|
2014-06-19 23:50:37 -04:00
|
|
|
Then require the gem following rspec-rails in your rails_helper (or spec_helper
|
|
|
|
if you're using RSpec 2.x):
|
2014-04-16 02:47:52 -04:00
|
|
|
|
2014-06-19 23:50:37 -04:00
|
|
|
``` ruby
|
2014-04-16 02:47:52 -04:00
|
|
|
require 'rspec/rails'
|
|
|
|
require 'shoulda/matchers'
|
|
|
|
```
|
|
|
|
|
2014-01-10 20:36:52 -05:00
|
|
|
### Test::Unit
|
|
|
|
|
2014-10-21 03:42:21 -04:00
|
|
|
shoulda-matchers was originally a component of [Shoulda][shoulda], a meta-gem
|
|
|
|
that also provides `should` and `context` syntax via
|
|
|
|
[shoulda-context][shoulda-context]. For this reason you'll want to include this
|
|
|
|
gem in your Gemfile instead:
|
2014-01-10 20:36:52 -05:00
|
|
|
|
|
|
|
```ruby
|
|
|
|
group :test do
|
|
|
|
gem 'shoulda'
|
|
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
### Non-Rails apps
|
|
|
|
|
|
|
|
Once it is loaded, shoulda-matchers automatically includes itself into your test
|
|
|
|
framework. It will mix in the appropriate matchers for ActiveRecord,
|
|
|
|
ActiveModel, and ActionController depending on the modules that are available at
|
|
|
|
runtime. For instance, in order to use the ActiveRecord matchers, ActiveRecord
|
2014-10-21 03:42:21 -04:00
|
|
|
must be present beforehand.
|
2013-12-18 22:06:29 -05:00
|
|
|
|
2014-10-21 03:42:21 -04:00
|
|
|
If your application is written against Rails, everything should "just work", as
|
2013-12-18 22:06:29 -05:00
|
|
|
shoulda-matchers will most likely be declared after Rails in your Gemfile. If
|
2014-10-21 03:42:21 -04:00
|
|
|
your application is written against another framework such as Sinatra or
|
|
|
|
Padrino, you may have a different setup, so you will want to ensure that you are
|
|
|
|
requiring shoulda-matchers after the components of Rails you are using. For
|
|
|
|
instance, if you wanted to use and test against ActiveModel, you'd say:
|
2014-01-10 20:36:52 -05:00
|
|
|
|
|
|
|
```ruby
|
|
|
|
gem 'activemodel'
|
|
|
|
gem 'shoulda-matchers'
|
|
|
|
```
|
|
|
|
|
|
|
|
and not:
|
|
|
|
|
|
|
|
```ruby
|
|
|
|
gem 'shoulda-matchers'
|
|
|
|
gem 'activemodel'
|
|
|
|
```
|
2012-03-09 11:57:31 -05:00
|
|
|
|
2014-06-20 00:44:06 -04:00
|
|
|
## Generating documentation
|
|
|
|
|
2014-06-21 19:28:47 -04:00
|
|
|
YARD is used to generate documentation, which can be viewed [online][rubydocs].
|
|
|
|
You can preview changes you make to the documentation locally by running
|
2014-06-20 00:44:06 -04:00
|
|
|
|
|
|
|
yard doc
|
|
|
|
|
|
|
|
from this directory. Then, open `doc/index.html` in your browser.
|
|
|
|
|
|
|
|
If you want to see a live preview as you work without having to run `yard` over
|
|
|
|
and over again, keep this command running in a separate terminal session:
|
|
|
|
|
2014-06-21 22:04:17 -04:00
|
|
|
watchr docs.watchr
|
2014-06-20 00:44:06 -04:00
|
|
|
|
2013-10-23 15:27:08 -04:00
|
|
|
## Versioning
|
|
|
|
|
|
|
|
shoulda-matchers follows Semantic Versioning 2.0 as defined at
|
|
|
|
<http://semver.org>.
|
2012-03-09 11:57:31 -05:00
|
|
|
|
|
|
|
## License
|
|
|
|
|
2015-02-20 03:55:52 -05:00
|
|
|
shoulda-matchers is copyright © 2006-2015 [thoughtbot, inc](https://thoughtbot.com/). It is free software,
|
2013-10-23 15:27:08 -04:00
|
|
|
and may be redistributed under the terms specified in the
|
|
|
|
[MIT-LICENSE](MIT-LICENSE) file.
|
|
|
|
|
2015-03-08 10:24:52 -04:00
|
|
|
## About thoughtbot
|
|
|
|
|
|
|
|
![thoughtbot](https://thoughtbot.com/logo.png)
|
|
|
|
|
2015-03-26 16:46:03 -04:00
|
|
|
shoulda-matchers is maintained and funded by thoughtbot, inc.
|
2015-03-08 10:24:52 -04:00
|
|
|
The names and logos for thoughtbot are trademarks of thoughtbot, inc.
|
|
|
|
|
|
|
|
We are passionate about open source software.
|
|
|
|
See [our other projects][community].
|
|
|
|
We are [available for hire][hire].
|
|
|
|
|
|
|
|
[community]: https://thoughtbot.com/community?utm_source=github
|
|
|
|
[hire]: https://thoughtbot.com?utm_source=github
|
2014-10-21 03:50:09 -04:00
|
|
|
[version-badge]: http://img.shields.io/gem/v/shoulda-matchers.svg
|
|
|
|
[rubygems]: http://rubygems.org/gems/shoulda-matchers
|
|
|
|
[travis-badge]: http://img.shields.io/travis/thoughtbot/shoulda-matchers/master.svg
|
2013-10-23 15:27:08 -04:00
|
|
|
[travis]: http://travis-ci.org/thoughtbot/shoulda-matchers
|
2014-10-21 03:50:09 -04:00
|
|
|
[downloads-badge]: http://img.shields.io/gem/dtv/shoulda-matchers.svg
|
2015-01-23 18:24:14 -05:00
|
|
|
[rubydocs]: http://matchers.shoulda.io/docs
|
2013-10-23 15:27:08 -04:00
|
|
|
[contributors]: https://github.com/thoughtbot/shoulda-matchers/contributors
|
2014-10-21 03:42:21 -04:00
|
|
|
[shoulda]: http://github.com/thoughtbot/shoulda
|
|
|
|
[shoulda-context]: http://github.com/thoughtbot/shoulda-context
|