Exercism-এ আপনার Bash অনুশীলনীগুলো কীভাবে টেস্ট করবেন তা শিখুন
Exercism ওয়েবসাইটের অনলাইন এডিটর ব্যবহার করে আপনি অনুশীলনীগুলো সমাধান করতে পারেন। অথবা অনুশীলনীগুলো আপনার কম্পিউটারে ডাউনলোড করুন, স্থানীয়ভাবে সেগুলো সমাধান করুন এবং তারপর Exercism-এ জমা দিন। এই ডকুমেন্টের বাকি অংশে স্থানীয়ভাবে কাজ করার কথা বলা হয়েছে।
অনুশীলনী ডাউনলোড ও জমা দিতে আপনার exercism কমান্ড-লাইন টুলটি প্রয়োজন হবে।
exercism cli-এর ডকুমেন্টেশন দেখুন।
ডিফল্ট exercism টুলের একটি বিরক্তিকর দিক হলো, একটি অনুশীলনী ডাউনলোড করার পর আপনাকে ম্যানুয়ালি ডিরেক্টরি পরিবর্তন করতে হয়।
এই র্যাপার ফাংশনটি সেটি আপনার হয়ে সামলায়; এটি আপনার ~/.bashrc-এ রেখে দিন।
exercism () {
local out
readarray -t out < <(command exercism "$@")
printf '%s\n' "${out[@]}"
if [[ $1 == "download" && -d "${out[-1]}" ]]; then
cd "${out[-1]}" || return 1
fi
}
মনে রাখবেন, এটি একটি শেল স্ক্রিপ্ট হতে পারে না, এটি অবশ্যই একটি শেল ফাংশন হবে। শেল স্ক্রিপ্ট চাইল্ড প্রসেসে চালানো হয় এবং আপনার বর্তমান শেলের এনভায়রনমেন্ট (যেমন কারেন্ট ওয়ার্কিং ডিরেক্টরি) পরিবর্তন করতে পারে না।
bash ট্র্যাকের টেস্টের জন্য আমরা bats ব্যবহার করছি।
কাল্পনিক "whatever" অনুশীলনীর টেস্টগুলো এভাবে চালান:
cd /path/to/your/exercise_workspace/bash/whatever
bats whatever.bats
স্থানীয়ভাবে টেস্ট চালানোর সময় ডিবাগ আউটপুট প্রিন্ট করতে চাইলে স্থানীয়ভাবে ডিবাগ করা দেখুন।
bats-core ইনস্টল করাআপনার পছন্দের প্যাকেজ ম্যানেজার থেকে এটি ইনস্টল করতে পারবেন:
Homebrew-সহ macOS-এ এটি দেখতে অনেকটা এমন হবে:
$ brew install bats-core
==> Downloading https://github.com/bats-core/bats-core/archive/v1.1.0.tar.gz
==> Downloading from https://codeload.github.com/bats-core/bats-core/tar.gz/v1.1.0
######################################################################## 100.0%
==> ./install.sh /usr/local/Cellar/bats-core/1.1.0
🍺 /usr/local/Cellar/bats-core/1.1.0: 13 files, 55KB, built in 4 seconds
bats প্যাকেজও রয়েছে।
ভুলে সেটি ইনস্টল করবেন না: bats-core ইনস্টল করুন।Fedora 30 এবং নতুন সংস্করণের জন্য bats প্যাকেজ করা আছে, এটি দিয়ে ইনস্টল করতে পারেন
sudo dnf install bats
অন্যান্য Linux ডিস্ট্রিবিউশনে আমরা যে bats ইমপ্লিমেন্টেশন ব্যবহার করি, তা সুবিধাজনকভাবে প্যাকেজ করা নাও থাকতে পারে।
এটি ইনস্টল করার সবচেয়ে ভালো উপায় সোর্স থেকে করা।
আপনি যদি /usr/local-এর অধীনে এটি ইনস্টল করতে চান, তাহলে
git clone https://github.com/bats-core/bats-core
cd bats-core/
sudo ./install.sh /usr/local
এরপর, ধরে নিয়ে যে /usr/local/bin আপনার $PATH-এ আছে, আপনি এখন এটা করতে পারেন:
$ bats
Error: Must specify at least one <test>
Usage: bats [-cr] [-f <regex>] [-j <jobs>] [-p | -t] <test>...
bats [-h | -v]
...
$ git clone https://github.com/bats-core/bats-core.git
$ cd bats-core
$ ./install.sh $HOME
লক্ষ্য করুন: আপনি যখন পুরনো https://github.com/sstephenson/bats.git ব্যবহার করছেন এবং cp: cannot create symbolic link '${HOME}/bin/bats': No such file or directory জাতীয় একটি এরর দেখতে পান, তখন আপনাকে bin/bats/libexec/ ফোল্ডারের কনটেন্ট ম্যানুয়ালি ${HOME}/bin/-এ কপি করতে হবে।
খবর আছে যে নতুন bats সংস্করণগুলো MinGW bash-এ ভালোভাবে কাজ করে না। ইনস্টল স্ক্রিপ্ট চালানোর আগে আপনি চাইতে পারেন:
$ git checkout v1.1.0
টেস্টে বিভিন্ন assert* কমান্ডের অর্থ জানতে bats-assert লাইব্রেরির ডকুমেন্টেশন দেখুন।
একটি অনুশীলনী সমাধান করা মানে তার সব টেস্ট পাস করানো। ডিফল্টভাবে, টেস্ট চালালে কেবল একটি টেস্ট (প্রথমটি) এক্সিকিউট হয়। এটি ইচ্ছাকৃত, কারণ এতে আপনি কেবল ওই একটি টেস্ট পাস করানোর দিকেই মন দিতে পারেন। একবার এটি পাস হয়ে গেলে, অন্য টেস্টগুলোর আগে বসানো নিচের
[[ $BATS_RUN_SKIPPED == true ]] || skip
অ্যানোটেশনগুলো কমেন্ট আউট করে বা সরিয়ে দিয়ে আপনি পরের টেস্টটি চালু করতে পারেন।
skip অ্যানোটেশনযুক্তগুলোসহ সব টেস্ট চালাতে, আপনি একটি এনভায়রনমেন্ট ভ্যারিয়েবল BATS_RUN_SKIPPED-এর মান true সেট করতে পারেন।
কেবল bats চালানোর সময়ের জন্য এটি সেট করার একটি উপায় হলো:
BATS_RUN_SKIPPED=true bats exercise_name.bats
টাইপিং কমাতে একটি র্যাপার ফাংশন ব্যবহার করা সুবিধাজনক হতে পারে:
bats() {
BATS_RUN_SKIPPED=true command bats *.bats
}
তারপর কেবল এভাবে টেস্ট চালান:
bats
bats
bats-core মূল bats ইমপ্লিমেন্টেশন থেকে ফর্ক করা হয়েছিল।
sstephenson/bats প্রজেক্টটি বেশ বাগপূর্ণ ছিল এবং পরিত্যক্ত হয়ে গিয়েছিল।
২০১৭ সালে এর মালিকানা হস্তান্তর করা হয়: sstephenson/bats#150 (comment)।
আপনার যদি মূল sstephenson/bats ইনস্টল করা থাকে (bats -v দিয়ে পরীক্ষা করুন, যদি এটি 1.0-এর কম ভার্সন নম্বর দেখায়), তাহলে আপনার bats-core-এ চলে যাওয়া উচিত; নইলে আপনি হয়তো ব্যাখ্যাহীন টেস্ট ব্যর্থতার সম্মুখীন হবেন।