ruby on rails - rspec-রেল ব্যবহার করে একটি ফাইল আপলোড পরীক্ষা করুন




ruby-on-rails file-upload (4)

আপনি একা RSpec ব্যবহার করে ফাইল আপলোড পরীক্ষা করতে পারেন কিনা তা নিশ্চিত নই। আপনি Capybara চেষ্টা Capybara ?

একটি অনুরোধ spec থেকে attach_file এর attach_file পদ্ধতি ব্যবহার করে ফাইল আপলোড পরীক্ষা করা সহজ।

উদাহরণস্বরূপ (এই কোড শুধুমাত্র একটি ডেমো):

it "can upload a license" do
  visit upload_license_path
  attach_file "uploadLicense", /path/to/file/to/upload
  click_button "Upload License"
end

it "can download an uploaded license" do
  visit license_path
  click_link "Download Uploaded License"
  page.should have_content("Uploaded License")
end

আমি রেলগুলিতে আপলোড হওয়া একটি ফাইল পরীক্ষা করতে চাই, কিন্তু এটি কীভাবে করতে হবে তা আমি নিশ্চিত নই।

এখানে কন্ট্রোলার কোড:

def uploadLicense
    #Create the license object
    @license = License.create(params[:license]) 


    #Get Session ID
    sessid = session[:session_id]

    puts "\n\nSession_id:\n#{sessid}\n"

    #Generate a random string
    chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a
    newpass = ""
    1.upto(5) { |i| newpass << chars[rand(chars.size-1)] }

    #Get the original file name
    upload=params[:upload]
    name =  upload['datafile'].original_filename 

    @license.format = File.extname(name)

    #calculate license ID and location
    @license.location = './public/licenses/' + sessid + newpass + name 

    #Save the license file
    #Fileupload.save(params[:upload], @license.location) 
    File.open(@license.location, "wb") { |f| f.write(upload['datafile'].read) }

     #Set license ID
    @license.license_id = sessid + newpass

    #Save the license
    @license.save

    redirect_to :action => 'show', :id => @license.id 
end

আমি এই স্পেক চেষ্টা করেছি, কিন্তু এটি কাজ করে না:

it "can upload a license and download a license" do
    file = File.new(Rails.root + 'app/controllers/lic.xml')
    license = HashWithIndifferentAccess.new
    license[:datafile] = file
    info = {:id => 4}
    post :uploadLicense, {:license => info, :upload => license}
end

কিভাবে আমি rspec ব্যবহার করে ফাইল আপলোড অনুকরণ করতে পারি?


আপনি যদি Rack :: Test * অন্তর্ভুক্ত করেন তবে কেবল পরীক্ষার পদ্ধতিগুলি অন্তর্ভুক্ত করুন

describe "my test set" do
  include Rack::Test::Methods

তাহলে আপনি আপলোডকৃত ফাইলটি ব্যবহার করতে পারেন:

post "/upload/", "file" => Rack::Test::UploadedFile.new("path/to/file.ext", "mime/type")

* দ্রষ্টব্য: আমার উদাহরণ সিনাট্রা ভিত্তিক, যা র্যাক প্রসারিত করে, তবে রেলের সাথে কাজ করতে হবে, যা র্যাক, টিটিবোমকেও ব্যবহার করে


আমি এটা কাজ পেতে উভয় অন্তর্ভুক্ত করা হয়েছে:

describe "my test set" do
  include Rack::Test::Methods
  include ActionDispatch::TestProcess

ফাইল আপলোডিং পরীক্ষা করার জন্য আপনি fixture_file_upload পদ্ধতিটি ব্যবহার করতে পারেন: আপনার পরীক্ষা ফাইলটিকে "{Rails.root} / spec / fixtures / files" ডিরেক্টরিতে রাখুন

before :each do
  @file = fixture_file_upload('files/test_lic.xml', 'text/xml')
end

it "can upload a license" do
  post :uploadLicense, :upload => @file
  response.should be_success
end

যদি আপনি প্যারামিটার আকারে ফাইলটি আপলোড করেন ['আপলোড'] ['ডেটাফিল']

it "can upload a license" do
  file = Hash.new
  file['datafile'] = @file
  post :uploadLicense, :upload => file
  response.should be_success
end




rspec-rails