On Thu, Apr 22, 2010 at 9:28 AM, ben rooney <ben.rooney62 at
googlemail.com> wrote:> I have a model that generates the authorization_rules.rb for
> declarative_auth. I am not sure how I can go about testing the model -
> apart from anything I don''t want my test to over-write the file -
so,
> er, I am not quite sure how to go about it.
>
> I *could* have some sort of sniffer in my model to see if I am in the
> Test environment and generate a different file, but putting code into
> my model to pass tests doesn''t seem a very, well, sensible thing
to
> do.
>
> Anyone been there, done that?
Assuming that in you code you write the file with say
File.open(path_to_authorization_rules_dot_rb, ''w'') do | f |
#code to write the file contents to f
end
where path_to_authorization_rules_dot_rb is some constant, variable or
expression which evaluates to the path to the file.
You could do something like
@iostream = StringIO.new
File.stub(:open) { yield @iostream}
# call your code
# test the contents of @iostream.string
This should work assuming your code doesn''t open any other files.
Another way would be to extract the code in the open block to a
separate method which takes the IO object as a parameter, and test
that method passing in a StringIO.
--
Rick DeNatale
Blog: http://talklikeaduck.denhaven2.com/
Github: http://github.com/rubyredrick
Twitter: @RickDeNatale
WWR: http://www.workingwithrails.com/person/9021-rick-denatale
LinkedIn: http://www.linkedin.com/in/rickdenatale