ruby-on-rails – fixture_file_upload有{file}不存在错误

以下是我上传文件的测试代码.
describe "file process" do
 before(:each) do
   # debugger
   @file = fixture_file_upload('test.csv','text/csv')
 end

 it "should be able to upload file" do
  post :upload_csv,:upload => @file
  response.should be_success
 end
end

但是,当我运行rspec规范时,它产生了以下错误

Failure/Error: @file = fixture_file_upload('test.csv','text/csv')
 RuntimeError:
   test.csv file does not exist
 # ./spec/controllers/quotation_controller_spec.rb:29:in `block (3 levels) in <top (required)>'

我已经google了很多地方,但我仍然找不到它背后的原因.任何想法?

解决方法

Fixture_file_upload基本上仍然有效.您只需要确保您的spec_helper.rb文件中的灯具路径取消注释&正确设置为spec / fixtures路径&包括ActionDispath :: TestProcess:
RSpec.configure do |config|
  config.include ActionDispatch::TestProcess

  # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
  config.fixture_path = "#{::Rails.root}/spec/fixtures"

  ...

在测试中指定文件的地方,请确保在文件名前面加上’/’,如下例所示:

describe "POST /subscriber_imports" do
  let(:file) { { :file => fixture_file_upload('/files/data.csv','text/csv') } }
  subject { post :create,:subscriber_import => file }
  ...
end

文件绝对路径是config.fixture_path中指定的基本路径以及在fixture_file_upload函数调用中指定的相对路径.所以在本例中,file.csv必须放在#{Rails.root} /spec/fixtures/files/data.csv中

相关文章

以下代码导致我的问题: class Foo def initialize(n=0) @n = n end attr_accessor :n d...
这是我的spec文件,当为上下文添加测试“而不是可单独更新用户余额”时,我得到以下错误. require 's...
我有一个拦截器:DevelopmentMailInterceptor和一个启动拦截器的inititializer setup_mail.rb. 但我想将...
例如,如果我有YAML文件 en: questions: new: 'New Question' other: recent: ...
我听说在RSpec中避免它,let,let !,指定,之前和主题是最佳做法. 关于让,让!之前,如果不使用这些,我该如...
我在Rails中使用MongoDB和mongo_mapper gem,项目足够大.有什么办法可以将数据从Mongoid迁移到 Postgres...