[rspec-users] a MockExpectationError problem

Phillip Koebbe
Sun, 25 Apr 2010 16:00:52 -0000

On 2010-04-25 3:43 AM, Patrick J. Collins wrote:
> Hi everyone,
>
> I have a test for importing vcards, and I was finding that each time it was
> being run, it was generating new photos and since it was using the test
> database, it was actually overwriting real photos that were being stored in
the
> file system (they are named based on the record''s id).  So it was
apparent to
> me that I need to use mocking to intercept Photo.create so that it
doesn''t
> really happen...
>
>
...snip...
> Any ideas?
>
> Thanks..
>
> Patrick J. Collins
> http://collinatorstudios.com

Hi Patrick,

See http://gist.github.com/378489 for how I ended up specing a file
upload. This isn''t the exact same situation, but maybe you will get
some
ideas that will help. And there may be a better way, but this seems to
work and is fairly easy for me understand.

Here''s a little info on the app to shed some light on what I''m
doing in
the spec. I am working on an app that has a "media library" that users
can upload into. There are four types of media: audio, video, images,
and documents. During the upload process, I try to determine the mime
type automatically, and from that, the type of media, but I do allow
those things to be set manually. I have a run-time constant
(APP_CONFIG[:media_root_path]) that defines where the files should be on
the file system, and I have to change that during the test to make sure
development files don''t get overwritten. That''s accomplished
with the
call to set_app_config, which is really nothing more than replacing a
constant. Its definition is

     def set_app_config(new_app_config)
         saved_app_config = APP_CONFIG.dup
         Kernel::silence_warnings { Object.const_set(:APP_CONFIG,
new_app_config ) }
         return saved_app_config
     end

Let me know if you have any questions.

Peace,
Phillip