| Module | Shoulda::Macros |
| In: |
lib/shoulda/macros.rb
|
Macro that creates a test asserting a change between the return value of a block that is run before and after the current setup block is run. This is similar to Active Support‘s assert_difference assertion, but supports more than just numeric values. See also should_not_change.
The passed description will be used when generating the test name and failure messages.
Example:
context "Creating a post" do
setup { Post.create }
should_change("the number of posts", :by => 1) { Post.count }
end
As shown in this example, the :by option expects a numeric difference between the before and after values of the expression. You may also specify :from and :to options:
should_change("the number of posts", :from => 0, :to => 1) { Post.count }
should_change("the post title", :from => "old", :to => "new") { @post.title }
Combinations of :by, :from, and :to are allowed:
# Assert the value changed in some way:
should_change("the post title") { @post.title }
# Assert the value changed to anything other than "old:"
should_change("the post title", :from => "old") { @post.title }
# Assert the value changed to "new:"
should_change("the post title", :to => "new") { @post.title }
Macro that creates a test asserting that a record of the given class was created.
Example:
context "creating a post" do
setup { Post.create(post_attributes) }
should_create :post
end
Macro that creates a test asserting that a record of the given class was destroyed.
Example:
context "destroying a post" do
setup { Post.first.destroy }
should_destroy :post
end
Macro that creates a test asserting no change between the return value of a block that is run before and after the current setup block is run. This is the logical opposite of should_change.
The passed description will be used when generating the test name and failure message.
Example:
context "Updating a post" do
setup { @post.update_attributes(:title => "new") }
should_not_change("the number of posts") { Post.count }
end