My first attempt is basic but already I have problems.
The following is called as
it_should_require_attribute Model, :attribute
but I would rather call if as
it_should_require_attribute @model, :attribute.
I prefer this call as I want to use what has been setup in my
before(:each)
block – setting @model and all other housekeeping stuff required for
the
tests – and I can then remove dut_instance = dut.new from the macro.
Alas, my before(:each) block is not being called!! I thought it would be
called when the it in the macro is met.
module ModelMacros
dut - Domain Under Test
aut - Attribute Under Test
def it_should_require_attribute(dut, aut)
it “is not valid with missing #{aut}” do
dut_instance = dut.new
dut_instance.send("#{aut}=", nil)
dut_instance.should_not be_valid
dut_instance.should have(1).error_on(aut.to_sym)
end
end
end
Could anyone give me some tips on how to approach macros better for
seamless integration into my tests.
it_should_require_attribute @model, :attribute.
it “is not valid with missing #{aut}” do
dut_instance = dut.new
dut_instance.send("#{aut}=", nil)
dut_instance.should_not be_valid
dut_instance.should have(1).error_on(aut.to_sym)
end
end
end
Could anyone give me some tips on how to approach macros better for seamless
integration into my tests.
I like to use self.described_class instead of passing classes or
instances in. Here is an example:
def it_should_require_attribute(attribute)
klass = self.described_class
instance = klass.new
instance.send("#{attribute}=", nil)
instance.should_not be_valid
instance.should have(1).error_on(attribute.to_sym)
end
describe MyModel do
it_should_require_attribute :some_attribute
end
I’m still using RSpec 1.x on Rails 2.3.x projects and have no idea if
this is supported in RSpec 2.x.
@obj.should_not be_valid
it_should_require_attribute Model, :attribute
Alas, my before(:each) block is not being called!! I thought it would be
dut_instance.should_not be_valid
in. Here is an example:
it_should_require_attribute :some_attribute http://rubyforge.org/mailman/listinfo/rspec-users
Thanks for your reply.
Firstly, I was mistaken, my before block is being called when the it
block
is met in my macro.
I’m using rspec-rails 1.3.4 and Rails 2.3.11
Your code doesn’t really help, though. It’s just another way of
addressing
what I’m already doing. As I now know my before block is begin called
and I
have access to an instance variable, I tried a generic name @dut (Domain
Under Test) and that works. But, I have now lost a meaningful instance
variable name for non macro tests. Maybe I could just #dup them.
Is there a better way? I reckon there is and will find it while playing.
I always find replies useful and I thanked you for it. I didn’t know
about
described_class, for example, so I learned something there.
My request for having my macros more seamless was to do with them using
the
current environment they were running in (before blocks etc.) I have
solved
that by not being so dupid.
I think too much good food over Christmas has made me even softer.
I’m just trying out macros and my first one is taken from the RSpec book which
replaces …
The following is called as
end
instance = klass.new
I’m using rspec-rails 1.3.4 and Rails 2.3.11
Your code doesn’t really help, though. It’s just another way of addressing what
I’m already doing. As I now know my before block is begin called and I have access
to an instance variable, I tried a generic name @dut (Domain Under Test) and that
works. But, I have now lost a meaningful instance variable name for non macro
tests. Maybe I could just #dup them.
Sorry, I should have been more specific. I wasn’t addressing the issue
you were having with the before block. I was addressing this:
Could anyone give me some tips on how to approach macros better for seamless
integration into my tests.
Which I understood to mean that if anyone had any ideas about how to
make the tests simpler/dryer/etc, you’d be happy to hear them. Sorry if
I misunderstood and you didn’t find it useful.
Peace.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.