Wrap text
Report abuse
Bringing matrix goodness to your unit tests (see http://seancribbs.com/tech/2007/07/04/metaprogramming-unit-tests-part-2)
|
|
def self.params(*args)
@@parameters = args.flatten
end
def self.valid_create(*args, &block)
klass = self.name.chomp("Test")
@@valid_creations ||= 0
@@valid_creations += 1
count = @@valid_creations
zipped_args = @@parameters.zip(args).inject([]) {|memo, item| memo += item }
params = Hash[*zipped_args]
define_method "test_valid_create_#{@@valid_creations}" do
assert_difference klass.constantize, :count do
object = send("create_#{klass.underscore}", params)
assert !object.new_record?, "v#{count}: #{object.errors.full_messages.to_sentence}"
assert block.call(object) if block
end
end
end
def self.invalid_create(*args, &block)
klass = self.name.chomp("Test")
@@invalid_creations ||= 0
@@invalid_creations += 1
count = @@invalid_creations
zipped_args = @@parameters.zip(args).inject([]) {|memo, item| memo += item }
params = Hash[*zipped_args]
define_method "test_invalid_create_#{@@invalid_creations}" do
assert_no_difference klass.constantize, :count do
object = send("create_#{klass.underscore}", params)
puts "i#{count}: #{object.errors.full_messages.to_sentence}"
assert block.call(object) if block
end
end
end
|