I''ve been developing a series of custom assertions for testing my
models and it
looks like I can unify most some of the assertions if I can find a good way to
determine the class under test at run-time. Now I refactor my test code rather
vigorously so its not as simple as just stripping "Test" off the name
of the
test case class, but I have a few thoughts on a useful convention I can use to
ease it.
Now this is probably more of a (near novice) Ruby question rather than rails,
but I can''t seem to locate the answer -- given a string containing a
class name
is there a way to
a) check if that class is defined/locatable for inclusion
b) convert the string to a Class object for the named class
Ie, I''m trying to do:
def setup
@klass=class_under_test(self.class)
end
protected
def class_under_test(klass)
/([A-Z][a-z_]*)Test/.match(klass.to_s)
$1 # <----- Now I have a string, not a Class, obviously
# Of course I need a more complete alogrithm here, but I''d like
to
# to get the base case working first, do I need to use one of the
# eval-type functions?
end
def assert_attribute_required(field)
@non_inserted_fixture[field]=nil
obj = @klass.new(@non_inserted_fixture) # <---- Now I need a Class
object
assert_not_valid obj
assert obj.errors.invalid?(field)
end
Thank you.
Eric
I am not sure if I get your question right... maybe this is what you need:
require ''set''
def acts_as_test
TestClasses.get << self
end
class TestClasses
@@test_classes = Set.new
def self.get
@@test_classes
end
end
class TestMe
acts_as_test
end
class TestMeToo
acts_as_test
end
> TestClasses.get.inspect
#<Set: {TestMeToo, TestMe}>
-------- Original-Nachricht --------
Datum: Tue, 13 Jun 2006 10:14:54 -0400
Von: Eric D Nielsen <nielsene@MIT.EDU>
An: rails@lists.rubyonrails.org
Betreff: [Rails] Dynamic determination of class under test...
> I''ve been developing a series of custom assertions for testing my
models
> and it
> looks like I can unify most some of the assertions if I can find a good
> way to
> determine the class under test at run-time. Now I refactor my test code
> rather
> vigorously so its not as simple as just stripping "Test" off the
name of
> the
> test case class, but I have a few thoughts on a useful convention I can
> use to
> ease it.
>
> Now this is probably more of a (near novice) Ruby question rather than
> rails,
> but I can''t seem to locate the answer -- given a string containing
a class
> name
> is there a way to
> a) check if that class is defined/locatable for inclusion
> b) convert the string to a Class object for the named class
>
> Ie, I''m trying to do:
>
> def setup
> @klass=class_under_test(self.class)
> end
>
> protected
> def class_under_test(klass)
> /([A-Z][a-z_]*)Test/.match(klass.to_s)
> $1 # <----- Now I have a string, not a Class, obviously
> # Of course I need a more complete alogrithm here, but I''d
like to
> # to get the base case working first, do I need to use one of the
> # eval-type functions?
> end
>
> def assert_attribute_required(field)
> @non_inserted_fixture[field]=nil
> obj = @klass.new(@non_inserted_fixture) # <---- Now I need a Class
> object
> assert_not_valid obj
> assert obj.errors.invalid?(field)
> end
>
> Thank you.
>
> Eric
> _______________________________________________
> Rails mailing list
> Rails@lists.rubyonrails.org
> http://lists.rubyonrails.org/mailman/listinfo/rails
> > def assert_attribute_required(field) > @non_inserted_fixture[field]=nil > obj = @klass.new(@non_inserted_fixture) # <---- Now I need a Class > object > assert_not_valid obj > assert obj.errors.invalid?(field) > endFor this part, thanks to ActiveSupport, you would have something like: ... obj = @klass.constantize.new() ... That will get you your new class object to work with. Thank you.> > Eric > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >-------------- next part -------------- An HTML attachment was scrubbed... URL: http://wrath.rubyonrails.org/pipermail/rails/attachments/20060613/5c20e42d/attachment.html
Eric D. Nielsen
2006-Jun-13 16:07 UTC
[Rails] Re: Dynamic determination of class under test...
Nick Stuart wrote:>> >> def assert_attribute_required(field) >> @non_inserted_fixture[field]=nil >> obj = @klass.new(@non_inserted_fixture) # <---- Now I need a Class >> object >> assert_not_valid obj >> assert obj.errors.invalid?(field) >> end > > > For this part, thanks to ActiveSupport, you would have something like: > ... > obj = @klass.constantize.new() > ...Thank you, that was one half of what I was looking for and I''m positively I can figure out the rest now that the base case works. Eric -- Posted via http://www.ruby-forum.com/.