Regarding Testing Mixins


#1

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 H.


#2

On Sat, 25 Mar 2006, James H. wrote:

handle this discreprancy in file locations:

Thank you,

James H.

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


#3

On Mar 24, 2006, at 10:43 PM, James H. 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!

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 G. II


#4

On 2006-03-25 00:09:47 -0500, removed_email_address@domain.invalid said:

String (expected Module)")

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

James H.