Compare projects
Project comparisons allow you to view any selection of projects side by side just like they're shown on regular categories or in search results. You can try out an example or start yourself by adding a library to the comparison via the input below. You can also easily share your current comparison with others by sending the URL of the current page.
0.0
{<img src="https://secure.travis-ci.org/socialcast/socialcast-shoulda-ext.png?branch=master" alt="Build Status" />}[http://travis-ci.org/socialcast/socialcast-shoulda-ext]
= Socialcast Shoulda Extensions
Adds new matchers and functionality to the shoulda test library
= Installation
In your Gemfile:
group :test do
gem 'socialcast_shoulda_ext', :git => 'git@github.com:socialcast/socialcast-shoulda-ext.git', :require => 'shoulda_ext'
end
If you want to include the trigger_callbacks matcher, also add the following to your test helper:
ShouldaExt::Matchers::TriggerCallbackMatcher.attach_active_record_callback_hooks!
= Matchers
== RecordCountChangeMatcher
Test if the count for a model has changed, and by how much. Requires the context_with_matcher_before_hooks patch, which is included by default.
Provides the following matcher methods:
- create_record(klass_or_symbol)
Alias for change_record_count.for(klass_or_symbol).by(1)
- create_records(klass_or_symbol, amount)
Alias for change_record_count.for(klass_or_symbol).by(amount)
- destroy_record(klass_or_symbol)
Alias for change_record_count.for(klass_or_symbol).by(-1)
- destroy_records(klass_or_symbol, amount)
Alias for change_record_count.for(klass_or_symbol).by(-amount)
- change_record_count
Tests the difference in record count before and after the current setup/subject block
Can be used with the follow methods:
- for(klass_or_symbol)
Provides the class which the test is being performed on. Can be a constant or a symbol
- by(amount)
Provides an expected difference for the number of records for the specified class.
Excluding this number will allow the matcher to check for any difference
Examples:
context "creating a blog article" do
context "with good parameters" do
setup do
post :create, :blog => {:title => 'my blog post', :body => 'Ipsum lorem...'}
end
should create_record :blog
end
context "without a body" do
setup do
post :create, :blog => {:title => 'my blog post' }
end
should_not create_record Blog
end
end
== RespondWithJson
Check if the controller's response is json
Examples:
context ":index.json" do
setup do
get :index, :format => 'json'
end
# Just check to see that the response was json
should respond_with_json
# Evaluate the hash produced by the json yourself
should respond_with_json { |json| json.first['blog']['title'] == 'blog post 1'}
# Provide an exact match
should respond_with_json.exactly(['blog' => {'id' => 1, 'title' => 'blog post 1'}])
# Provide an exact match with a block
should response_with_json.exactly{ |json| JSON.parse(Blog.all.to_json)}
end
context ":index.html" do
setup do
get :index
end
# or the negation
should_not respond_with_json
end
== TriggerCallbackMatcher
Test if create, update, destroy, or save callbacks were triggered.
Requires running
ShouldaExt::Matchers::TriggerCallbackMatcher.attach_active_record_callback_hooks!
in your test suite in order to work properly.
Examples:
context "doing nothing to a record" do
subject { Blog.new :title => 'blog title' }
should_not trigger_callbacks
end
context "creating a record" do
subject { Blog.create! :title => 'blog title' }
should trigger_callbacks.for :create
should_not trigger_callbacks.for :update, :destroy
end
= Integrations
Currently only integrates with test/unit. RSpec support to come.
= Shoulda Extensions
== ContextWithMatcherBeforeHooks
Adds the ability to define a 'before' method on any method which will be run before each context's setup/subject block. Used by RecordCountChangeMatcher to record the number of records before the tested operation takes place.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
Activity