Included Modules

Shoulda::Macros

Public Instance Methods

should_change(description, options = {}, &block) click to toggle source

Deprecated.

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 }

This macro was deprecated because these tests aren’t as valuable as alternative tests that explicitly test the final state.

Consider an alternative:

  context "updating a post" do
    setup do
      @post = Post.create(:title => "old")
      put :update, :post => {:title => "new"}, :id => @post.to_param
    end
    should "update the title" do
      assert_equal "new", @post.reload.title
    end
  end
    # File lib/shoulda/macros.rb, line 54
54:     def should_change(description, options = {}, &block)
55:       ::ActiveSupport::Deprecation.warn("Not considered a useful test. Instead, test the end state explicitly.")
56:       by, from, to = get_options!([options], :by, :from, :to)
57:       stmt = "change #{description}"
58:       stmt << " from #{from.inspect}" if from
59:       stmt << " to #{to.inspect}" if to
60:       stmt << " by #{by.inspect}" if by
61: 
62:       before = lambda { @_before_should_change = block.bind(self).call }
63:       should stmt, :before => before do
64:         old_value = @_before_should_change
65:         new_value = block.bind(self).call
66:         assert_operator from, :===, old_value, "#{description} did not originally match #{from.inspect}" if from
67:         assert_not_equal old_value, new_value, "#{description} did not change" unless by == 0
68:         assert_operator to, :===, new_value, "#{description} was not changed to match #{to.inspect}" if to
69:         assert_equal old_value + by, new_value if by
70:       end
71:     end
should_create(class_name) click to toggle source

Deprecated.

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
     # File lib/shoulda/macros.rb, line 122
122:     def should_create(class_name)
123:       ::ActiveSupport::Deprecation.warn
124:       should_change_record_count_of(class_name, 1, 'create')
125:     end
should_destroy(class_name) click to toggle source

Deprecated.

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
     # File lib/shoulda/macros.rb, line 138
138:     def should_destroy(class_name)
139:       ::ActiveSupport::Deprecation.warn
140:       should_change_record_count_of(class_name, 1, 'destroy')
141:     end
should_not_change(description, &block) click to toggle source

Deprecated.

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

This macro was deprecated because these tests aren’t as valuable as alternative tests that explicitly test the final state.

Consider an alternative:

  context "updating a post" do
    setup do
      @post = Post.create(:title => "old")
      put :update, :post => {:title => ""}, :id => @post.to_param
    end
    should "not update the title" do
      assert_equal "old", @post.reload.title
    end
  end
     # File lib/shoulda/macros.rb, line 102
102:     def should_not_change(description, &block)
103:       ::ActiveSupport::Deprecation.warn("Not considered a useful test. Instead, test the end state explicitly.")
104:       before = lambda { @_before_should_not_change = block.bind(self).call }
105:       should "not change #{description}", :before => before do
106:         new_value = block.bind(self).call
107:         assert_equal @_before_should_not_change, new_value, "#{description} changed"
108:       end
109:     end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.