[rspec-users] a MockExpectationError problem

Phillip Koebbe phillipkoebbe at gmail.com
Sun Apr 25 12:00:52 EDT 2010


  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



More information about the rspec-users mailing list