[rspec-users] fixture_file_upload and edge rspec?

Carl Porth badcarl at gmail.com
Sun Nov 11 16:42:53 EST 2007


On Nov 11, 2007, at 8:29 AM, Leslie Freeman wrote:

> Slowly digging to the bottom of this one.
>
> If I add
>
> Test::Unit::TestCase.fixture_path = RAILS_ROOT + '/spec/fixtures/'
>
> to my spec_helper.rb, then everything runs fine. So presumably there
> is somewhere that config.fixture_path from the Spec::Runner.configure
> block is supposed to get put into Test::Unit::TestCase.fixture_path,
> and for some reason that is no longer happening. I will continue to
> dig into this problem, but if anyone is familiar with this part of
> the rspec system and can help me get to the right place faster, I'd
> sure appreciate it.
>
> Les

fixture_file_upload is just a convenience method to call  
ActionController::TestUploadedFile.new.  I just call  
ActionController::TestUploadedFile.new directly in my own helper  
method with the complete path to the file.  This avoids any need to  
mess with fixture_path.

Carl
>
>
>
> On Nov 11, 2007, at 6:51 AM, David Chelimsky wrote:
>
>> On Nov 10, 2007 11:25 PM, Leslie Freeman <lesliefreeman3 at gmail.com>
>> wrote:
>>> To follow up on this a little more, I created a new project, froze
>>> rails to edge (REVISION_8125), and installed rspec/rspec on rails
>>> from trunk. Then I generated an rspec_model for Asset with the
>>> following spec:
>>>
>>> require File.dirname(__FILE__) + '/../spec_helper'
>>>
>>> describe Asset do
>>>   before(:each) do
>>>     @asset = Asset.new
>>>   end
>>>
>>>   it "should be valid" do
>>>     @asset.should be_valid
>>>   end
>>>
>>>   it "should allow me to use fixture_file_upload" do
>>>      @asset.attributes = {:uploaded_data => fixture_file_upload
>>> ('images/florence.jpg', 'image/jpeg')}
>>>   end
>>> end
>>>
>>> I created an images directory in my spec/fixtures dir and added
>>> florence.jpg to it. Then, when I run rake spec I get this error:
>>>
>>> NoMethodError in 'Asset should allow me to use fixture_file_upload'
>>
>> I am not familiar w/ fixture_file_upload myself. Is there anyone else
>> on this list who is who can help Les debug this situation?
>>
>> Thanks,
>> David
>>
>>> You have a nil object when you didn't expect it!
>>> You might have expected an instance of Array.
>>> The error occurred while evaluating nil.+
>>> /Users/leslief/Sites/tmp/testapp/vendor/rails/actionpack/lib/
>>> action_controller/test_process.rb:480:in `fixture_file_upload'
>>> ./spec/models/asset_spec.rb:13:
>>> /Users/leslief/Sites/tmp/testapp/vendor/plugins/rspec/lib/spec/dsl/
>>> example_group_methods.rb:40:in `instance_eval'
>>> /Users/leslief/Sites/tmp/testapp/vendor/plugins/rspec/lib/spec/dsl/
>>> example_group_methods.rb:40:in `run_example'
>>> /Users/leslief/Sites/tmp/testapp/vendor/plugins/rspec/lib/spec/dsl/
>>> example_runner.rb:63:in `run_example'
>>> /Users/leslief/Sites/tmp/testapp/vendor/plugins/rspec/lib/spec/dsl/
>>> example_runner.rb:24:in `run'
>>> /opt/local/lib/ruby/1.8/timeout.rb:48:in `timeout'
>>> /Users/leslief/Sites/tmp/testapp/vendor/plugins/rspec/lib/spec/dsl/
>>> example_runner.rb:22:in `run'
>>> /Users/leslief/Sites/tmp/testapp/vendor/plugins/rspec/lib/spec/dsl/
>>> example_suite.rb:26:in `rspec_run'
>>> /Users/leslief/Sites/tmp/testapp/vendor/plugins/rspec/lib/spec/dsl/
>>> example_suite.rb:22:in `each'
>>> /Users/leslief/Sites/tmp/testapp/vendor/plugins/rspec/lib/spec/dsl/
>>> example_suite.rb:22:in `rspec_run'
>>> /Users/leslief/Sites/tmp/testapp/vendor/plugins/rspec/lib/spec/test/
>>> unit/example_suite.rb:7:in `run'
>>> /Users/leslief/Sites/tmp/testapp/vendor/plugins/rspec/lib/spec/
>>> runner/
>>> behaviour_runner.rb:22:in `run'
>>> /Users/leslief/Sites/tmp/testapp/vendor/plugins/rspec/lib/spec/
>>> runner/
>>> behaviour_runner.rb:21:in `each'
>>> /Users/leslief/Sites/tmp/testapp/vendor/plugins/rspec/lib/spec/
>>> runner/
>>> behaviour_runner.rb:21:in `run'
>>> /Users/leslief/Sites/tmp/testapp/vendor/plugins/rspec/lib/spec/
>>> runner/
>>> options.rb:80:in `run_examples'
>>> /Users/leslief/Sites/tmp/testapp/vendor/plugins/rspec/lib/spec/
>>> runner/
>>> command_line.rb:19:in `run'
>>> /Users/leslief/Sites/tmp/testapp/vendor/plugins/rspec/bin/spec:3:
>>>
>>> line 13 of asset_spec.rb is  @asset.attributes = {:uploaded_data =>
>>> fixture_file_upload('images/florence.jpg', 'image/jpeg')}
>>>
>>> the offending line in test_process.rb is:
>>> Test::Unit::TestCase.respond_to?(:fixture_path) ?
>>> Test::Unit::TestCase.fixture_path + path : path, mime_type, binary
>>>
>>> From the full function:
>>> def fixture_file_upload(path, mime_type = nil, binary = false)
>>>       ActionController::TestUploadedFile.new(
>>>         Test::Unit::TestCase.respond_to?(:fixture_path) ?
>>> Test::Unit::TestCase.fixture_path + path : path,
>>>         mime_type,
>>>         binary
>>>       )
>>> end
>>>
>>> so it seems like Test::Unit::TestCase.fixture_path is returning nil.
>>> I tried to do a little digging to find where this should be getting
>>> set, but quickly got way out to sea.
>>>
>>> My spec_helper does have this line:
>>> config.fixture_path = RAILS_ROOT + '/spec/fixtures/'
>>>
>>> which seems right. I am hoping someone that knows more about the
>>> inner gears of rspec has some insight as to why
>>> Test::Unit::TestCase.fixture_path is nil.
>>>
>>> Thanks,
>>> Les
>>>
>>>
>>>
>>> On Nov 9, 2007, at 8:25 AM, Leslie Freeman wrote:
>>>
>>>>
>>>> On Nov 9, 2007, at 5:09 AM, David Chelimsky wrote:
>>>>
>>>>> On Nov 8, 2007 11:25 PM, Leslie Freeman <lesliefreeman3 at gmail.com>
>>>>> wrote:
>>>>>> Hi all,
>>>>>> I had some specs that were using fixture_file_upload that were
>>>>>> passing just fine. Then I froze edge rails to get some 2.0
>>>>>> functionality, then a I upgraded to trunk rspec to deal with
>>>>>>
>>>>>> uninitialized constant  
>>>>>> ActionView::Helpers::JavaScriptMacrosHelper
>>>>>>
>>>>>> After a couple other of tribulations, I have now gotten down to
>>>>>> just
>>>>>> a couple of not passing specs, all using the fixture_file_upload.
>>>>>> Here's an example
>>>>>>
>>>>>> it "should be invalid if uploaded file is not an image" do
>>>>>>     @image.attributes = valid_image_attributes.merge
>>>>>> ({:uploaded_data
>>>>>> => fixture_file_upload('/textfile.txt',
>>>>>>
>>>>>>                      'text/plain')})
>>>>>>     @image.should_not be_valid
>>>>>>     # content_type: is not included in the list
>>>>>>     @image.should have(1).error_on(:content_type)
>>>>>> end
>>>>>>
>>>>>> which fails with:
>>>>>> 2)
>>>>>> NoMethodError in 'Image unsaved should be invalid if uploaded
>>>>>> file is
>>>>>> not an image'
>>>>>> You have a nil object when you didn't expect it!
>>>>>> You might have expected an instance of Array.
>>>>>> The error occurred while evaluating nil.+
>>>>>> ./spec/models/image_spec.rb:25:
>>>>>
>>>>> What's on line 25?
>>>>
>>>> Sorry about that confusion. Line 25 is:
>>>>
>>>> @image.attributes = valid_image_attributes.merge({:uploaded_data =>
>>>> fixture_file_upload('/textfile.txt',text/plain')})
>>>>
>>>> (textfile.txt is located in my /spec/fixtures/ dir.)
>>>>
>>>> That line doesn't throw the error if I change it to something like:
>>>> @image.attributes = valid_image_attributes.merge({:uploaded_data =>
>>>> "foo"})
>>>>
>>>> But of course the spec fails. :)
>>>>
>>>> Leslie
>>>>
>>>>>
>>>>>>
>>>>>> A less than helpful error message. Any insight into what might be
>>>>>> causing this?
>>>>>>
>>>>>> Thanks,
>>>>>> Les
>>>>>> _______________________________________________
>>>>>> rspec-users mailing list
>>>>>> rspec-users at rubyforge.org
>>>>>> http://rubyforge.org/mailman/listinfo/rspec-users
>>>>>>
>>>>> _______________________________________________
>>>>> rspec-users mailing list
>>>>> rspec-users at rubyforge.org
>>>>> http://rubyforge.org/mailman/listinfo/rspec-users
>>>>
>>>> _______________________________________________
>>>> rspec-users mailing list
>>>> rspec-users at rubyforge.org
>>>> http://rubyforge.org/mailman/listinfo/rspec-users
>>>
>>> _______________________________________________
>>> rspec-users mailing list
>>> rspec-users at rubyforge.org
>>> http://rubyforge.org/mailman/listinfo/rspec-users
>>>
>> _______________________________________________
>> rspec-users mailing list
>> rspec-users at rubyforge.org
>> http://rubyforge.org/mailman/listinfo/rspec-users
>
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 1561 bytes
Desc: not available
Url : http://rubyforge.org/pipermail/rspec-users/attachments/20071111/1058900f/attachment-0001.bin 


More information about the rspec-users mailing list