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' 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 <[EMAIL PROTECTED]> >> 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@rubyforge.org >>> http://rubyforge.org/mailman/listinfo/rspec-users >>> >> _______________________________________________ >> rspec-users mailing list >> rspec-users@rubyforge.org >> http://rubyforge.org/mailman/listinfo/rspec-users > > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users