Regarding Testing Mixins

How does one write a unit test for a mixin? I gathered since our unit test is a class (TestClassName < Test::Unit::TestCase), we could just include said module into said class. However, I've ran into a problem.

Suppose my project directory is as follows:

../project_dir/trunk/lib # Where all my classes and scripts go
../project_dir/trunk/tests # Where all my tests go

My mixin resides in the lib folder, and normally I use this neat trick to handle this discreprancy in file locations:

$:.unshift File.join(File.dirname(__FILE__), "..", "lib") # Thank you Pick Ax!

Why doesn't this seem to work for mixins? Where does Ruby look for mixins?

I'm assuming it's a path problem despite the fact that Ruby groans that the name I'm providing it is an unitialized constant (e.g. include Mixin -- if I write include "Mixin", Ruby tells me "wrong argument type String (expected Module)")

Thank you,

James Herdman

a) you still must require your mixin using the __FILE__ method
   b) then you mix it in as normal

eg

   require 'mixin'

   class Test < Test::Unit::TestCase
     include Mixin
   end

make sense?

regards.

-a

···

On Sat, 25 Mar 2006, James Herdman wrote:

How does one write a unit test for a mixin? I gathered since our unit test is a class (TestClassName < Test::Unit::TestCase), we could just include said module into said class. However, I've ran into a problem.

Suppose my project directory is as follows:

../project_dir/trunk/lib # Where all my classes and scripts go
../project_dir/trunk/tests # Where all my tests go

My mixin resides in the lib folder, and normally I use this neat trick to handle this discreprancy in file locations:

$:.unshift File.join(File.dirname(__FILE__), "..", "lib") # Thank you Pick Ax!

Why doesn't this seem to work for mixins? Where does Ruby look for mixins?

I'm assuming it's a path problem despite the fact that Ruby groans that the name I'm providing it is an unitialized constant (e.g. include Mixin -- if I write include "Mixin", Ruby tells me "wrong argument type String (expected Module)")

Thank you,

James Herdman

--
share your knowledge. it's a way to achieve immortality.
- h.h. the 14th dali lama

Just FYI, you can also solve this by running your tests (from the root project directory) with something like:

   $ ruby -I lib:test test/ts_all.rb

If you use Rake, it will automatically add the directories for your test tasks.

James Edward Gray II

···

On Mar 24, 2006, at 10:43 PM, James Herdman wrote:

Suppose my project directory is as follows:

../project_dir/trunk/lib # Where all my classes and scripts go
../project_dir/trunk/tests # Where all my tests go

My mixin resides in the lib folder, and normally I use this neat trick to handle this discreprancy in file locations:

$:.unshift File.join(File.dirname(__FILE__), "..", "lib") # Thank you Pick Ax!

Indeed! Thank you. I feel like a dolt, but now I'll never forget again =)

James Herdman

···

On 2006-03-25 00:09:47 -0500, ara.t.howard@noaa.gov said:

On Sat, 25 Mar 2006, James Herdman wrote:

How does one write a unit test for a mixin? I gathered since our unit test is a class (TestClassName < Test::Unit::TestCase), we could just include said module into said class. However, I've ran into a problem.

Suppose my project directory is as follows:

../project_dir/trunk/lib # Where all my classes and scripts go
../project_dir/trunk/tests # Where all my tests go

My mixin resides in the lib folder, and normally I use this neat trick to handle this discreprancy in file locations:

$:.unshift File.join(File.dirname(__FILE__), "..", "lib") # Thank you Pick Ax!

Why doesn't this seem to work for mixins? Where does Ruby look for mixins?

I'm assuming it's a path problem despite the fact that Ruby groans that the name I'm providing it is an unitialized constant (e.g. include Mixin -- if I write include "Mixin", Ruby tells me "wrong argument type String (expected Module)")

Thank you,

James Herdman

   a) you still must require your mixin using the __FILE__ method
   b) then you mix it in as normal

eg

   require 'mixin'

   class Test < Test::Unit::TestCase
     include Mixin
   end

make sense?

regards.

-a