I’m trying to add some functionality to the setup method of all my
tests.
I added a method called setup_with_ts in the test_helper and chained
it using alias_method_chain :setup, :ts and that works great for every
test that does not define setup in the test.
So for my unit tests i tried also defining the same method
setup_with_ts in a
class ActiveSupport::TestCase
def setup_with_ts
puts “setup with ts”
setup_without_ts
end
alias_method_chain :setup, :ts
end
it was just a test to see what would happen.
if i called this method in the setup of a test like :
def setup
setup_with_ts
.
.
.
end
that will call it just fine so the method exists. but if i remove the
setup_with_ts line and run a test the setup method in the test runs,
but it never runs my aliased chained method.
i’m not sure why the alias_method_chain seems to work for test with no
setup method and not for one that has a setup method defined. Any
help would be great.
Another update:
if i do:
class ActiveSupport::TestCase
def setup_with_ts
puts “setup with ts”
setup_without_ts
end
alias_method_chain :setup, :ts
end
and then do puts self.methods in one of my tests it shows those
methods exist. but they do not get called unless i define
setup_with_ts and alias it in each test…
i’m not sure why the alias_method_chain seems to work for test with no
setup method and not for one that has a setup method defined. Any
help would be great.
In a nutshell, because there is no reason it should. If a class
overrides the superclass implementation of a method then that
superclass implementation is not called unless the new implementation
explicitly does it. You should be able to do
def setup
super
…
end
However you don’t need to do all this, because ActiveSupport::TestCase
already handles this sort of stuff. If you do
class ActiveSupport::TestCase
def setup_with_ts
end
setup :setup_with_ts
end
then your method will get called at the appropriate time
(ActiveSupport sets up a callback chain that is run just before setup
is called)
Fred
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.