No description, website, or topics provided.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

assert_same is now called assert_value

Important Announcement: assert_same is renamed to assert_value because it conflicts with stock ruby assert_same assertion. This is the new assert_value repository.

Deprecated Functionality:


Checks that two strings are same and "magically" replace expected value with the actual in case the new behavior (and new actual value) is correct. Support two kind of arguments: string and code block.

String Example:

It is better to start with no expected value

assert_same "foo"

Then run tests as usual with "rake test". As a result you will see diff between expected and actual values:

@@ -1,0, +1,1 @@
Accept the new value: yes to all, no to all, yes, no? [Y/N/y/n] (y):

If you accept the new value your test will be automatically modified to

assert_same "foo", <<-END

Block Example:

assert_same supports code block as argument. If executed block raise exception exception message is returned as actual value:

assert_same do

Run tests

@@ -1,0, +1,1 @@
+Exception NoMethodError: undefined method `+' for nil:NilClass
Accept the new value: yes to all, no to all, yes, no? [Y/N/y/n] (y): 

After new value is accepted

assert_same(<<-END) do
    Exception NoMethodError: undefined method `+' for nil:NilClass
    nil + 1


--no-interactive skips all questions and just reports failures
--autoaccept prints diffs and automatically accepts all new actual values
--no-canonicalize turns off expected and actual value canonicalization (see below for details)

Additional options can be passed during both single test file run and rake test run:

In Ruby 1.8:

ruby test/unit/foo_test.rb -- --autoaccept
rake test TESTOPTS="-- --autoaccept"

In Ruby 1.9:

ruby test/unit/foo_test.rb --autoaccept
rake test TESTOPTS="--autoaccept"


Before comparing expected and actual strings, assert_same canonicalizes both using these rules:

  • indentation is ignored (except for indentation relative to the first line of the expected/actual string)
  • ruby-style comments after "#" are ignored
  • empty lines are ignored
  • trailing whitespaces are ignored

You can turn canonicalization off with --no-canonicalize option. This is useful when you need to regenerate expected test strings. To regenerate the whole test suite, run:

In Ruby 1.8:

rake test TESTOPTS="-- --no-canonicalize --autoaccept"

In Ruby 1.9:

rake test TESTOPTS="--no-canonicalize --autoaccept"


  • 0.7: Support Ruby 1.9's MiniTest
  • 0.6: Support test execution on Mac
  • 0.5: Support code blocks to assert_same
  • 0.4: Added support for code blocks as argument
  • 0.3: Ruby 1.9 is supported
  • 0.2: Make assert_same useful as a standalone gem. Bugfixes
  • 0.1: Initial release