পাখি 4: পরীক্ষার ডাটাবেস পুনরায় সেট করবেন কীভাবে?


88

আমি রেল 4 এ আছি এবং লক্ষ্য করেছি যে আমার কিছু আরএসপেক পরীক্ষা ব্যর্থ হচ্ছে কারণ আমার কিছু পরীক্ষার রিফ্যাক্টরিং ফিল্টার করার আগে ব্যবহার করে (সম্ভবত লেনদেনের কারণে)। এই পোস্টে একটি অনুরূপ সমস্যা বর্ণনা করে:

রেল পরীক্ষা ডাটাবেস কিছু রান পরে ক্লিয়ারিং না

ডাটাবেসক্লিয়নার রত্ন ব্যবহারের পরিবর্তে, পরীক্ষার ডাটাবেসটি সাফ করার জন্য কি রেক কমান্ড রয়েছে? আমি বিশ্বাস করি rake db:test:prepareরেল ৪ এ অবমাননিত রয়েছে Also এছাড়াও, যদি লেনদেনের আগে পছন্দ হয়

post :create, user: Fabricate.attributes_for(:user)

অবিরাম হয়। টেস্টের ডেটাবেসটি নিজেই সাফ করার প্রয়োজনীয়তা এড়াতে কি রিফ্যাকচারিংয়ের বিকল্প উপায় আছে?

উত্তর:


121

একটি ওভারকিল সমাধানটি হ'ল:

bundle exec rake db:drop RAILS_ENV=test
bundle exec rake db:create RAILS_ENV=test
bundle exec rake db:schema:load RAILS_ENV=test

আপনি এই সমস্ত কিছু একটি রেক টাস্কে তৈরি করতে এবং চালাতে পারেন।

এখান থেকে অন্য সমাধানটি হ'ল নিম্নলিখিতটি আপনার spec_helper.rbফাইল অন্তর্ভুক্ত করা

config.after :all do
  ActiveRecord::Base.subclasses.each(&:delete_all)
end

দাবি অস্বীকার: আমি এটি পরীক্ষা করে দেখিনি এবং আপনার এসও পোস্টটি পড়া উচিত কারণ এটি সমস্ত পরিস্থিতিতে কাজ করে না।

বলা হচ্ছে, আমি এই জাতীয় পরিস্থিতি এড়াতে ডাটাবেস ক্লিনার রত্ন ব্যবহার করার পরামর্শ দেব।


4
প্রথম 3 রেক ডিবি: * কেবল সর্বশেষের সাথে প্রতিস্থাপন করা যেতে পারে কারণ এটি সমস্ত সারণী মুছে ফেলে এবং এটি স্কিমা থেকে তৈরি করে।
কনোল


4
ব্যবহারের rake db:structure:loadআপনি schema.rb এর structure.sql পরিবর্তে ব্যবহার করছেন পারেন।
আর্কোনিক

4
উপরের জন্য একটি সুন্দর 1 লাইনার সহজভাবে:RAILS_ENV=test bundle exec rake db:drop db:create db:schema:load
stwr667

98

এটা হতে পারে:

bundle exec rake db:reset RAILS_ENV=test

21
আমি লক্ষ্য করি এটিও চলে rake db:seed ... যা সমস্যা হতে পারে বা নাও হতে পারে
হ্যারি উড

4
আপনি যদি রেল 5 ব্যবহার করেন তবে কমান্ডটি এখন রাকের পরিবর্তে রেললাইন হয়েছে :bundle exec rails db:reset RAILS_ENV=test
ইউরিয়েল হার্নান্দেজ

19

কখনও কখনও আপনার এই কমান্ডটি চালানোর প্রয়োজন হতে পারে (alচ্ছিক)

rails db:environment:set RAILS_ENV=test

তবে আপনার পরীক্ষার ডাটাবেসটি নিশ্চিহ্ন করার জন্য নিশ্চিত হওয়া উচিত:

rails db:drop db:create db:migrate RAILS_ENV=test


2

আপনি সংশ্লিষ্ট টেবিলগুলি থেকে সমস্ত এন্ট্রি মুছে ফেলার পরে ফিল্টার যুক্ত করতে পারেন।


0

তত্ত্বগতভাবে এই ActiveRecord::Migration.maintain_test_schema!কৌশলটি করা উচিত। ভিতরে রাখোrails_helper.rb


0

আমি একটি সহজ রেক টাস্ক লিখেছি যা সম্পাদিত কমান্ডের উপর নির্ভর করে সমস্ত পরীক্ষা এবং বিকাশ ডেটাবেস / ড্রপ / মাইগ্রেট (বা ড্রপ এবং মাইগ্রেট) করে।

এটিতে কোনও ত্রুটি দেখা দিলে তারা চালিয়ে যেতে চায় কিনা এবং ওপেন 3-এর পপেন 3 পদ্ধতি ব্যবহার করে (যেমন আমরা স্টিডিন, স্টাডআউট এবং স্ট্ডার অ্যাক্সেস করতে পারি; এবং কোনও ব্যর্থ কমান্ডের ফলস্বরূপ রেক টাস্কের প্রক্রিয়া হয় না) ব্যবহারকারীকে প্রম্পট করার জন্য এটি কার্যকারিতা অন্তর্ভুক্ত করে বাতিল করা ( সিস্টেম ব্যবহার করার সময় ভিন্ন )

আশা করি এটি কাউকে সাহায্য করবে। :)

https://github.com/xtrasimplicity/rake_all_db_helper/

সম্পাদনা: এটি আপনার শেল থেকে ম্যানুয়ালি কার্যকর করা দরকার, যখনই আপনি আপনার ডাটাবেস সাফ করতে চান।

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