আপনি কি RSpec ব্যবহার করে আপনার রুবি অ্যাপ্লিকেশনের জন্য পরীক্ষা লিখতে শিখতে চান?
তারপর আপনি সঠিক জায়গায় আছেন !
এই টিউটোরিয়ালে আমি আপনাকে দেখাব কিভাবে তা করতে হয়।
বিষয়বস্তু
- 1 কেন আপনাকে পরীক্ষা লিখতে হবে?
- 1.0.1 এটি ত্রুটিগুলির বিরুদ্ধে একটি নিরাপত্তা জাল তৈরি করে (বিশেষ করে রিফ্যাক্টরিংয়ের জন্য দরকারী)
- 1.0.2 এটি আপনার কোড নথিভুক্ত করতে সাহায্য করে
- 1.0.3 এটি আপনাকে একটি ফিডব্যাক লুপ দেয়
- 1.0.4 এটি আপনাকে নিশ্চিত করতে সাহায্য করে যে আপনার কোডটি আপনার প্রত্যাশিত ফলাফল তৈরি করছে
- 1.0.5 এটি আপনাকে একটি রুবি চাকরি পেতে সাহায্য করে
- 2 RSpec দিয়ে শুরু করা
- 3 RSpec পরীক্ষার উদাহরণ
- 4 RSpec Let মেথড
- 5 কিভাবে বিষয় পদ্ধতি ব্যবহার করবেন
- 6 কিভাবে আপনার সমস্ত পরীক্ষার আগে কোড চালাবেন
- 7 কিভাবে টেস্টিং সাবগ্রুপ তৈরি করবেন
- 8 কিভাবে সাময়িকভাবে একটি পরীক্ষা নিষ্ক্রিয় করবেন
- নাম অনুসারে 9 রানিং উদাহরণ
- 10 RSpec প্রত্যাশা এবং ম্যাচার্স
- 11 RSpec ফরম্যাটার
- 12 কিভাবে ধীরগতির পরীক্ষা খুঁজে বের করবেন
- 13 RSpec ভিডিও টিউটোরিয়াল
- 14 সারাংশ
- 14.1 সম্পর্কিত
আপনি কেন পরীক্ষা লিখবেন?
এখানে কেন:
এটি ত্রুটির বিরুদ্ধে একটি নিরাপত্তা জাল তৈরি করে (বিশেষ করে রিফ্যাক্টরিংয়ের জন্য দরকারী)
আপনার যদি কোনো টেস্ট স্যুট না থাকে তাহলে কিছু ভাঙার ভয়ে আপনি আপনার কোড স্পর্শ করতে চান না...
…পরীক্ষা করা আপনার আত্মবিশ্বাস বাড়ায়!
এটি আপনার কোড নথিভুক্ত করতে সাহায্য করে
আপনার পরীক্ষাগুলি বর্ণনা করে যে আপনার আবেদনটি কী করা উচিত৷
৷এটি আপনাকে একটি ফিডব্যাক লুপ দেয়
আপনি যখন TDD করছেন তখন আপনি একটি প্রতিক্রিয়া লুপ পাবেন এটি আপনাকে পরবর্তীতে কী ফোকাস করতে হবে তা বলে, আপনি যদি সহজেই বিভ্রান্ত হন তাহলে দরকারী৷
৷এটি আপনাকে নিশ্চিত করতে সাহায্য করে যে আপনার কোড আপনার প্রত্যাশা অনুযায়ী ফলাফল তৈরি করছে
এটি গুরুত্বপূর্ণ!
আপনি যদি কিছু জটিল যুক্তি লিখছেন, তাহলে আপনি নিশ্চিত করতে চান যে এটি বিভিন্ন ইনপুটের সাথে কাজ করছে এবং শুধুমাত্র একটি উদাহরণ দিয়ে নয় যে আপনি এসেছেন৷
৷পরীক্ষাগুলি আপনাকে কোণার কেসগুলি উন্মোচন করতে এবং সেগুলি নথিভুক্ত করতে সহায়তা করতে পারে৷
এটি আপনাকে রুবির চাকরি পেতে সাহায্য করে
বেশিরভাগ চাকরির আবেদনগুলি আপনার পরীক্ষার দক্ষতার প্রশংসা করবে, আপনার চাকরি পাওয়ার সম্ভাবনা বাড়িয়ে তুলবে।
RSpec দিয়ে শুরু করা
RSpec কিভাবে কাজ করে তা বোঝার জন্য আসুন একটি ধাপে ধাপে উদাহরণ দেখি .
আমরা একটি সহজ অ্যাপ্লিকেশন লিখতে যাচ্ছি যেটি ফ্যাক্টরিয়াল সংখ্যা খুঁজে বের করে।
প্রথম ধাপ :
'rspec/autorun'describe ফ্যাক্টরিয়াল ডু # ...end প্রয়োজন
এটি আপনার প্রথম RSpec লেখার প্রাথমিক কোড পরীক্ষা।
আপনার rspec রত্ন প্রয়োজন।
তারপর আপনাকে একটি describe
তৈরি করতে হবে আপনার সমস্ত পরীক্ষা একসাথে গ্রুপ করতে ব্লক করুন এবং RSpec কে জানাতে যে আপনি কোন ক্লাসে পরীক্ষা করছেন।
এরপরে রয়েছে it
ব্লক:
ফ্যাক্টোরিয়াল বর্ণনা করুন এটা "কিছু কিছু করে" ডু # ... endend
এটি পরীক্ষার নাম, সাথে সমস্ত উপাদানকে একত্রিত করার একটি উপায় পরীক্ষার নিজেই।
উপাদানগুলি হল:
- সেটআপ
- ব্যায়াম
- যাচাই করুন
সেটআপ হল যেখানে আপনি যে কোনো বস্তু তৈরি করেন যা আপনাকে তৈরি করতে হবে।
এটা প্রস্তুতি পর্ব।
তারপরে আপনি যে পদ্ধতিটি অনুশীলন করতে চান তার রিটার্ন মান পেতে কল করুন।
অবশেষে, আপনি একটি প্রত্যাশার সাথে ফলাফল যাচাই করুন (RSpec) বা দাবী (মিনিটেস্ট)।
RSpec পরীক্ষার উদাহরণ
এখন যদি আমরা একটি ফ্যাক্টরিয়াল পদ্ধতি লিখতে চাই, আমাদের অনলাইনে বা হাতে গণনা করে কিছু বৈধ মান খুঁজে বের করতে হবে।
তারপর আমরা আমাদের পরীক্ষার সাথে সেগুলি ব্যবহার করি৷
এরকম :
ফ্যাক্টোরিয়াল বর্ণনা করুন do it "5 এর ফ্যাক্টোরিয়াল খুঁজে বের করে" ডু ক্যালকুলেটর =ফ্যাক্টরিয়াল. নতুন প্রত্যাশা(calculator.factorial_of(5)).to eq(120) endend
আপনি যখন এই কোডটি চালান (যেমন একটি নিয়মিত রুবি প্রোগ্রাম) তখন আপনি এটি পাবেন:
ইনিটিয়ালাইজড কনস্ট্যান্ট ফ্যাক্টরিয়াল (NameError)
এটি স্বাভাবিক কারণ আমাদের কাছে Factorial
নেই এখনো ক্লাস।
আসুন একটি তৈরি করি:
শ্রেণীর ফ্যাক্টোরিয়ালেন্ড
পরবর্তী ত্রুটি হবে:
অনির্ধারিত পদ্ধতি 'factorial_of'
আমি factorial_of
তৈরি করে এটি ঠিক করি পদ্ধতি:
ক্লাস ফ্যাক্টোরিয়াল ডিফ ফ্যাক্টোরিয়াল_অফ এন্ডএন্ড
তারপর কোডটি আবার চালান:
আর্গুমেন্টের ভুল সংখ্যা (প্রদত্ত 1, প্রত্যাশিত 0)
আরেকটি ত্রুটি! কিন্তু আপনি কি জানেন?
এটি একটি ভাল জিনিস 🙂
ত্রুটিগুলি হতাশার কিছু নয়৷
তারা প্রতিক্রিয়া।
এখন:
factorial_of
-এ একটি পদ্ধতি যুক্তি যোগ করুন পদ্ধতি:
class factorial def factorial_of(n) endend
আপনি এখন যা পাচ্ছেন তা হল পরীক্ষায় ব্যর্থতা :
প্রত্যাশিত:120 পেয়েছে:শূন্য
এই সময়ে আপনি ঠিক এই জায়গায় থাকতে চান!
পরবর্তী কাজ হল পদ্ধতিটি বাস্তবায়ন করা:
class factorial def factorial_of(n) (1..n).inject(:*) endend
এবং আপনি আপনার প্রথম পাসিং পরীক্ষা পাবেন :
.0.00315 সেকেন্ডে সমাপ্ত (ফাইলগুলি লোড হতে 0.09083 সেকেন্ড সময় নেয়) 1 উদাহরণ, 0 ব্যর্থতা
এটাকেই আমরা বলি টেস্ট-চালিত উন্নয়ন (TDD)।
আপনি প্রথমে পরীক্ষাগুলি লিখুন, তারপর পরীক্ষাগুলি আপনাকে পরবর্তীতে কী করতে হবে সে সম্পর্কে গাইড করতে দিন৷
RSpec লেট মেথড
আপনি যদি অনেক পরীক্ষা লিখতে চান এবং একই বস্তু পুনরায় ব্যবহার করতে চান আপনি এই বস্তুগুলিকে let
দিয়ে সংজ্ঞায়িত করতে পারেন বিবৃতি।
এটা এই মত দেখায়:
ফ্যাক্টোরিয়াল ডু লেট(:ক্যালকুলেটর) { Factorial.new } এটা "5 এর ফ্যাক্টরিয়াল খুঁজে বের করে" do expect(calculator.factorial_of(5)).to eq(120) endend
এখন আপনি calculator
পুনরায় ব্যবহার করতে পারেন আপনার সমস্ত পরীক্ষায় একই describe
এর অধীনে ব্লক।
let
সম্পর্কে আপনার একটি জিনিস জানা উচিত এটা "অলস"।
আমি এর দ্বারা কি বোঝাতে চাই?
আপনি প্রথমবার ব্যবহার না করা পর্যন্ত অবজেক্টটি তৈরি হবে না৷ .
এটি একটি পার্থক্য করতে পারে যদি এই বস্তুটি তৈরি করার পার্শ্ব-প্রতিক্রিয়া থাকে, যেমন ডাটাবেস এন্ট্রি তৈরি করা, বা একটি ফাইলে লেখা৷
এই পার্শ্ব-প্রতিক্রিয়াগুলি এড়াতে সর্বোত্তম হবে, কিন্তু আপনি যদি তা করতে না পারেন তবে let!
ব্যবহার করুন পদ্ধতি।
উদাহরণ :
চলুন!(:user) { User.create("[email protected]") }
let!
পদ্ধতি অ-অলস, তাই কোনো পরীক্ষা চালানোর আগে অবজেক্ট তৈরি করা হবে।
কিভাবে বিষয় পদ্ধতি ব্যবহার করবেন
let
এর আরেকটি সংস্করণ হল subject
.
শুধুমাত্র পার্থক্য হল আপনার শুধুমাত্র একটি subject
থাকতে পারে , এবং এটিকে বোঝানো হয়েছে একটি উদাহরণ আপনি যে মূল বস্তুটি পরীক্ষা করছেন।
RSpec ইতিমধ্যেই একটি ডিফল্ট subject
তৈরি করে এই মত:
বিষয় { Factorial.new }
একে বলা হয় "অন্তর্নিহিত বিষয়"।
আপনি এটি এভাবে ব্যবহার করতে পারেন:
ফ্যাক্টোরিয়াল বর্ণনা করুন কি এটা "5 এর ফ্যাক্টরিয়াল খুঁজে পায়" আশা করি(subject.factorial_of(5)).to eq(120) endend
আপনি আপনার বিষয়ের একটি নাম দিতে পারেন:
বিষয়(:ক্যালকুলেটর) { Factorial.new }
এটি let
ব্যবহার করার মতো একইভাবে আচরণ করে , কিন্তু এটি এক-লাইন প্রত্যাশার ব্যবহার সক্ষম করে:
এটি { উচিত_খালি হওয়া উচিত }
আপনার সমস্ত পরীক্ষার আগে কীভাবে কোড চালাবেন
RSpec-এ এক্সিকিউশন হুক রয়েছে যা আপনি প্রতিটি পরীক্ষার আগে এবং পরে কিছু চালানোর জন্য বা পরীক্ষার একটি সম্পূর্ণ গ্রুপ ব্যবহার করতে পারেন।
উদাহরণস্বরূপ :
শপ করার আগে বর্ণনা করুন (:all) { Shop.prepare_database } পরে (:all) { Shop.cleanup_database }শেষ
আপনি যদি প্রতিটি উদাহরণের জন্য এই কোডটি চালাতে চান (উদাহরণ =RSpec-এ পরীক্ষা) আপনি :each
ব্যবহার করতে পারেন :all
এর পরিবর্তে .
কিভাবে টেস্টিং সাবগ্রুপ তৈরি করবেন
আপনি যদি আপনার অ্যাপে বিভিন্ন পরিস্থিতিতে পরীক্ষা করে থাকেন তাহলে একসাথে সম্পর্কিত পরীক্ষাগুলিকে গোষ্ঠীভুক্ত করা সহায়ক হতে পারে।
আপনি একটি প্রসঙ্গ ব্লক ব্যবহার করে এটি করতে পারেন৷ RSpec-এ।
এখানে একটি উদাহরণ:
কোর্স ডু কনটেক্সট বর্ণনা করুন "যখন ব্যবহারকারী লগ ইন করেন" এটি "কোর্স পাঠগুলি প্রদর্শন করে" এটি শেষ করে "কোর্স বিবরণ প্রদর্শন করে" শেষ প্রসঙ্গটি প্রদর্শন করে "যখন ব্যবহারকারী এটি লগইন না করে" এটি করুন "লগইন পৃষ্ঠায় পুনঃনির্দেশ করে " do end it "এটি একটি বার্তা দেখায়" do end endend
কীভাবে সাময়িকভাবে একটি পরীক্ষা নিষ্ক্রিয় করবেন
ডিবাগিং উদ্দেশ্যে একটি পরীক্ষা নিষ্ক্রিয় করা সম্ভব।
আপনাকে যা করতে হবে তা হল it
পরিবর্তন করা xit
পরীক্ষার জন্য আপনি নিষ্ক্রিয় করতে চান।
উদাহরণ :
প্রস্থান করুন "প্রচুর বেকন খায়" ডোএন্ড
x
সরাতে ভুলবেন না যখন আপনার কাজ শেষ!
নাম দ্বারা উদাহরণ চালানো
পরীক্ষাগুলি নিষ্ক্রিয় করার পরিবর্তে, আপনি -e
দিয়ে যে পরীক্ষাগুলি চালাতে চান তা ফিল্টার করতে পারেন পতাকা।
উদাহরণ :
> ruby person.rb -e বেকন
এই ফিল্টারিংটি পরীক্ষার নামের উপর ভিত্তি করে করা হয়েছে, তাই উপরের উদাহরণটি যেকোন পরীক্ষার সাথে "বেকন" শব্দের সাথে মিলবে।
RSpec প্রত্যাশা এবং ম্যাচার্স
আপনি এই উদাহরণটি মনে রাখতে পারেন যে আমরা ব্যবহার করছি:
expect(calculator.factorial_of(5)).to eq(120)
কিন্তু এই eq(120)
কি? অংশ?
ঠিক আছে, 120 হল সেই মান যা আমরা আশা করছি...
…এবং eq
যাকে আমরা ম্যাচার বলি।
RSpec কিভাবে আপনার পদ্ধতির আউটপুট তুলনা করে তা হল ম্যাচার্স আপনার প্রত্যাশিত মান সহ .
eq
এর ক্ষেত্রে , RSpec ==
ব্যবহার করে অপারেটর (রুবি অপারেটর সম্পর্কে আরও পড়ুন)।
কিন্তু অন্য ম্যাচার আছে আপনি ব্যবহার করতে পারেন।
উদাহরণস্বরূপ, be_something
ম্যাচার:
expect(nil).to be_nil
যেখানে something
একটি পূর্বনির্ধারিত পদ্ধতি (যেমন empty?
) যা পরীক্ষার ফলাফলে বলা হবে।
অন্যান্য দরকারী মিলার:
- অন্তর্ভুক্ত (অ্যারে এবং হ্যাশের জন্য)
- start_with
- শেষ_এর সাথে
- ম্যাচ (রেগুলার এক্সপ্রেশন ম্যাচিংয়ের জন্য)
- be_between
- have_key / have_value (হ্যাশের জন্য)
- be_instance_of
- প্রতিক্রিয়া করুন
- have_attributes (উদাহরণ ভেরিয়েবল পরীক্ষার জন্য)
একজন ম্যাচার যার বিশেষ মনোযোগের প্রয়োজন হল raise_error
ম্যাচার।
এর কারণ হল এটি ব্যবহার করার জন্য আপনাকে আপনার প্রত্যাশাকে একটি ব্লকের মধ্যে গুটিয়ে নিতে হবে।
এরকম :
প্রত্যাশিত{ :x.count }.to raise_error(NoMethodError)
change
matcher এছাড়াও এই মত কাজ করে:
প্রত্যাশিত{ stock.increment }.to change(stock, :value).by(100)
RSpec ফরম্যাটার
ডিফল্ট RSpec আউটপুট "প্রগতি" বিন্যাসে রয়েছে৷
৷
এই বিন্যাসের সাথে আপনি বিন্দু (.
) দেখতে পাবেন ) প্রতিনিধিত্ব করে 1 জন উত্তীর্ণ পরীক্ষা, একটি F
একটি ব্যর্থ পরীক্ষার জন্য (প্রত্যাশিত এবং বাস্তব মেলে না), অথবা একটি E
একটি ত্রুটির জন্য।
কিন্তু আপনি ব্যবহার করতে পারেন বিকল্প ফর্ম্যাটিং বিকল্প আছে.
এখানে একটি তালিকা রয়েছে:
- অগ্রগতি
- ডকুমেন্টেশন
- json
- html
আপনি -f পতাকা দিয়ে তাদের সক্ষম করতে পারেন:
> ruby factorial.rb -f dPerson অনেক স্বাস্থ্যকর খাবার খায়ডকুমেন্টেশন ফরম্যাট আউটপুট তৈরি করতে আপনার পরীক্ষার বিবরণ ব্যবহার করে।
কিভাবে ধীরগতির পরীক্ষা খুঁজে বের করবেন
আপনার পরীক্ষার প্রোফাইল করার জন্য RSpec একটি খুব সহজ বিকল্পের সাথে আসে .
শুধু
--profile
পাস করে ফ্ল্যাগ করে আপনি দেখতে পারবেন যে প্রতিটি পরীক্ষা চালানোর জন্য কতক্ষণ লাগে এবং সত্যিকারের ধীরগতিরগুলি ঠিক করতে৷এখানে একটি উদাহরণ আছে :
> ruby factorial.rb --profileFactorial 5 0.00043 সেকেন্ডের ফ্যাক্টরিয়াল খুঁজে পায়RSpec ভিডিও টিউটোরিয়াল
সারাংশ
আপনি শিখেছেন কিভাবে RSpec টেস্টিং ফ্রেমওয়ার্ক ব্যবহার করে পরীক্ষা লিখতে হয়।
এখন আপনার নিজের পরীক্ষা লেখা শুরু করার পালা!