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:
assert_same
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:
Failure:
@@ -1,0, +1,1 @@
+foo
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
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
nil+1
end
Run tests
Failure:
@@ -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
END
nil + 1
end
Options:
--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"
Canonicalization:
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"
Changelog
- 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