আমি কীভাবে রেলগুলিতে একটি ফাইল আপলোড পরীক্ষা করব?


101

আমার কাছে এমন একটি নিয়ামক রয়েছে যা আমাদের অ্যাপ্লিকেশনটির জন্য কিছু ব্যবহারকারীর রক্ষণাবেক্ষণ করতে JSON ফাইলগুলি গ্রহণ এবং তারপরে JSON ফাইলগুলি প্রক্রিয়াকরণের জন্য দায়ী। ব্যবহারকারী পরীক্ষার সময় ফাইল আপলোড এবং প্রক্রিয়াজাতকরণের কাজ করে তবে অবশ্যই আমি আমাদের পরীক্ষায় ব্যবহারকারীর রক্ষণাবেক্ষণের পরীক্ষা করার প্রক্রিয়াটি স্বয়ংক্রিয় করতে চাই। কীভাবে আমি কার্যক্ষম পরীক্ষার কাঠামোর একটি নিয়ন্ত্রণকারীর কাছে একটি ফাইল আপলোড করতে পারি?

উত্তর:


110

এই প্রশ্নের সন্ধান করা হয়েছে এবং এটি স্ট্যাক ওভারফ্লোতে বা তার উত্তর খুঁজে পাওয়া যায় নি, তবে এটি অন্য কোথাও পেয়েছে, তাই আমি এটি এসওতে উপলব্ধ করার জন্য বলছি।

রেলস কাঠামোর একটি ফাংশন রয়েছে fixture_file_upload( রেলস 2 রিয়েল 3 , রেল 5 ), যা নির্দিষ্ট করা ফাইলের জন্য আপনার ফিক্সচার ডিরেক্টরিটি অনুসন্ধান করবে এবং এটি কার্যকরী পরীক্ষায় নিয়ামকের জন্য একটি পরীক্ষা ফাইল হিসাবে উপলব্ধ করবে। এটি ব্যবহার করতে:

1) পরীক্ষার জন্য আপনার ফিক্সচার / ফাইলগুলি উপ ডিরেক্টরিতে পরীক্ষায় আপলোড করার জন্য আপনার ফাইলটি রাখুন।

2) আপনার ইউনিট পরীক্ষায় আপনি ফিক্সচার_ফায়াল_আপলোড ('পাথ', 'মাইম-টাইপ') কল করে আপনার পরীক্ষার ফাইলটি পেতে পারেন।

উদাহরণ:

bulk_json = fixture_file_upload('files/bulk_bookmark.json','application/json')

3) আপলোডের প্যারামিটার হিসাবে ফিজিক্স_ফায়াল_আপলোড দ্বারা প্রত্যাবর্তিত বস্তুটি পাস করার মাধ্যমে আপনি চান এমন নিয়ন্ত্রক ক্রিয়াকে আঘাত করার জন্য পোস্ট পদ্ধতিতে কল করুন।

উদাহরণ:

post :bookmark, :bulkfile => bulk_json

বা কারাগারে 5: post :bookmark, params: {bulkfile: bulk_json}

এটি আপনার ফিক্সচার ডিরেক্টরিতে ফাইলটির একটি টেম্পল ফাইলের অনুলিপি ব্যবহার করে সিমুলেটেড পোস্ট প্রক্রিয়াটির মধ্য দিয়ে চলবে এবং তারপরে আপনার ইউনিট পরীক্ষায় ফিরে আসবে যাতে আপনি পোস্টের ফলাফলগুলি পরীক্ষা করা শুরু করতে পারেন।


2
এটি 3 রেলগুলিতে কাজ করে না 3 অ্যাকশন_কন্ট্রোলার / টেস্ট_প্রসেস ফাইলটি অ্যাক্টিভাসপোর্ট 3 তে উপলব্ধ নয়। আমি এখানে একইটির
চিরন্তন

আপনার উত্তরের লিঙ্কটি 404, বা এটি কেবল আমার জন্য?
আর্নেস্ট

@ চিরানটান এটি এ্যাকশনডিসপাচে চলে গেছে :: টেস্টপ্রসেস
বেন লেখক

এটি কীভাবে ফ্যাক্টরিগার্লের সাথে ব্যবহার করা যায়? stackoverflow.com/questions/34677780/...
Richlewis

85

মরির উত্তরটি সঠিক, "অ্যাকশনকন্ট্রোলার :: টেস্টআপলোডডিল.নিউ" এর পরিবর্তে রেল 3-এ আপনাকে "র্যাক :: টেস্ট :: আপলোডডিল.নিউ" ব্যবহার করতে হবে।

ফাইল ফাইলটি তৈরি করা হয় তারপরে আরএসপেক বা টেস্টউনিট পরীক্ষায় প্যারামিটার মান হিসাবে ব্যবহার করা যেতে পারে।

test "image upload" do
  test_image = path-to-fixtures-image + "/Test.jpg"
  file = Rack::Test::UploadedFile.new(test_image, "image/jpeg")
  post "/create", :user => { :avatar => file }
  # assert desired results
  post "/create", :user => { :avatar => file }     

  assert_response 201
  assert_response :success
end

যখন আপনার ফিক্সারগুলি / টেস্ট / ফিক্সচারগুলিতে অবস্থিত না হয় তখন এই পদ্ধতিটি একটি দুর্দান্ত বিকল্প। উদাহরণস্বরূপ আপনি যদি পরীক্ষার জন্য কিছু ফাইল গতিশীলভাবে তৈরি করেন তবে সেগুলি পরিবর্তে একটি / টিএমপি ফোল্ডারে থাকতে পারে।
অলিভিয়ার এমবল্ট

25

আমি মনে করি নতুন অ্যাকশনডিস্পাচ :: এইচটিটিপি :: আপলোডড ফাইলটি এভাবে ব্যবহার করা ভাল:

uploaded_file = ActionDispatch::Http::UploadedFile.new({
    :tempfile => File.new(Rails.root.join("test/fixtures/files/test.jpg"))
})
assert model.valid?

আপনি আপনার বৈধতাগুলিতে যেমন ব্যবহার করছেন একই পদ্ধতিগুলি ব্যবহার করতে পারেন (উদাহরণস্বরূপ টেম্পাইল)।


8

আরএসপেক বই থেকে, বি 13.0:

রেলস 'একটি অ্যাকশনকন্ট্রোলার :: টেস্টআপলোডড ফাইল ক্লাস সরবরাহ করে যা একটি নিয়ামক স্পেসের প্যারাম হ্যাশগুলিতে একটি আপলোড করা ফাইলের প্রতিনিধিত্ব করতে ব্যবহৃত হতে পারে:

describe UsersController, "POST create" do
  after do
    # if files are stored on the file system
    # be sure to clean them up
  end

  it "should be able to upload a user's avatar image" do
    image = fixture_path + "/test_avatar.png"
    file = ActionController::TestUploadedFile.new image, "image/png"
    post :create, :user => { :avatar => file }
    User.last.avatar.original_filename.should == "test_avatar.png"
  end
end

এই অনুমানের জন্য আপনার স্পেক / ফিক্সচার ডিরেক্টরিতে একটি test_avatar.png চিত্র থাকতে হবে। এটি ফাইলটি গ্রহণ করবে, এটি নিয়ামককে আপলোড করবে এবং নিয়ামকটি একটি সত্যিকারের ব্যবহারকারী মডেল তৈরি এবং সংরক্ষণ করবে।


2
আমি এই কোডটি দিয়ে একটি পরীক্ষা চালানোর সময় আমি একটি "অবিচ্ছিন্ন ধ্রুবক অ্যাকশনকন্ট্রোলার :: টেস্টআপলোডড ফাইল" ত্রুটি পাই। ফাইলটিতে আমার আর কি কি দরকার পড়বে?
Vini.g.fer

1
এটি রেল ২.৩ এর প্রথমদিকে অবহেলিত বলে মনে হচ্ছে। রেল wards.০ এর পরে, আপনি এখানে ফিক্সচারগুলি ব্যবহার করে কীভাবে করবেন
সেবাস্তিয়ালসো

4

আপনি ফিক্সচার_ফাইল_আপলোড ব্যবহার করতে চান । আপনি আপনার পরীক্ষার ফাইলটিকে ফিক্সচার ডিরেক্টরিটির একটি উপ ডিরেক্টরিতে রেখে দেবেন এবং তারপরে ফিক্সচার_ফিল_আপলোডের পথে যাবেন। এখানে ফাইলের আপলোড ব্যবহার করে কোডের একটি উদাহরণ


1

আপনি যদি কারখানার মেয়েটির সাথে ডিফল্ট রেল পরীক্ষা ব্যবহার করেন। কোড নীচে ফাইন।

factory :image_100_100 do
    image File.new(File.join(::Rails.root.to_s, "/test/images", "100_100.jpg"))
end

দ্রষ্টব্য: আপনাকে একটি ছদ্মবেশী চিত্রটি রাখতে হবে /test/images/100_100.jpg

এটি পুরোপুরি কাজ করে।

চিয়ার্স!


0

আপনি যদি নিম্নলিখিতটি সহ আপনার কন্ট্রোলারে ফাইলটি পান

json_file = params[:json_file]
FileUtils.mv(json_file.tempfile, File.expand_path('.')+'/tmp/newfile.json')

তারপরে আপনার চশমাতে নিম্নলিখিতটি চেষ্টা করুন:

json_file = mock('JsonFile')
json_file.should_receive(:tempfile).and_return("files/bulk_bookmark.json")
post 'import', :json_file => json_file
response.should be_success

এটি ভুয়া পদ্ধতিটিকে 'টেম্পাইল' পদ্ধতিতে পরিণত করবে, যা লোড হওয়া ফাইলের পথে ফিরে আসবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.