آشنایی با آزمایش در یاقوت با rspec

آزمایش بخشی اساسی از توسعه نرم افزار است و اطمینان حاصل می کند که کد شما مطابق انتظار کار می کند و به طور مداوم رفتار می کند. در این پست وبلاگ ، ما ملزومات آزمایش در روبی را با استفاده از چارچوب RSPEC ، بررسی الگوهای آزمایش مشترک و ارائه یک تمرین پسوند دستی برای کمک به شما در تحکیم یادگیری خود ، پوشش خواهیم داد.
چرا تست می کنیم؟
قبل از غواصی به RSPEC ، بیایید به این موضوع بپردازیم که چرا آزمایش بسیار مهم است:
-
اشکالات اولیه: آزمایشات قبل از رسیدن به تولید ، به شناسایی خطاها کمک می کند.
-
اطمینان از قوام: با آزمایشات ، می توانید با اطمینان با اطمینان از کد Refactor ، با دانستن اینکه عملکرد موجود را نمی شکنید.
-
بهبود همکاری: آزمایشات انتظارات روشنی را برای نحوه رفتار روشها ارائه می دهد و به کل تیم شما کمک می کند تا با استانداردهای مداوم کار کنند.
-
صرفه جویی در وقت: اگرچه تست های نوشتن زمان به صورت مقدماتی طول می کشد ، اما باعث می شود زمان صرف شده برای اشکال زدایی و رفع مشکلات بعداً کاهش یابد.
🛠 تنظیم RSPEC
برای شروع استفاده rspec برای آزمایش کد یاقوت ، باید نصب کنید rspec
گوهر دستور زیر را در ترمینال خود اجرا کنید:
gem install rspec
در مرحله بعد ، RSPEC را در پروژه خود آغاز کنید:
rspec --init
این یک ایجاد می کند /spec
دایرکتوری و .rspec
پرونده پیکربندی شما پرونده های تست خود را در /spec
دایرکتوری ، در حالی که کد اجرای شما در /lib
دایرکتوری
نمونه ساختار پرونده
در اینجا نحوه ساختار پروژه شما آورده شده است:
.
├── lib
| └── student.rb # Your Ruby class
└── spec
└── student_spec.rb # Your RSpec tests
🔎 نوشتن اولین آزمون RSPEC خود
بیایید یک کلاس دانشجویی ساده بنویسیم و با استفاده از RSPEC یک مجموعه آزمون برای آن ایجاد کنیم.
مرحله 1: کلاس را تعریف کنید
ابتدا پرونده دانش آموز.rb را در فهرست /lib ایجاد کنید و کد زیر را اضافه کنید:
class Student
attr_reader :name, :cookies
def initialize(name)
@name = name
@cookies = []
end
def add_cookie(cookie)
@cookies << cookie
end
end
مرحله 2: فایل آزمون را ایجاد کنید
در مرحله بعد ، پرونده student_spec.rb را در فهرست /SPEC ایجاد کنید و مجموعه آزمون زیر را اضافه کنید:
require 'rspec'
require './lib/student'
describe Student do
describe '#initialize' do
it 'is an instance of Student' do
student = Student.new('Penelope')
expect(student).to be_a(Student)
end
it 'has a name' do
student = Student.new('Penelope')
expect(student.name).to eq('Penelope')
end
it 'has an empty cookie array by default' do
student = Student.new('Penelope')
expect(student.cookies).to eq([])
end
end
describe '#add_cookie' do
it 'adds a cookie to the cookies array' do
student = Student.new('Penelope')
student.add_cookie('Chocolate Chip')
student.add_cookie('Snickerdoodle')
expect(student.cookies).to eq(['Chocolate Chip', 'Snickerdoodle'])
end
end
end
🔥 درک نحو RSPEC
بیایید اجزای اصلی مجموعه تست RSPEC را تجزیه کنیم:
describe
بلوک ها:
-
آزمون های مرتبط با گروه ها ، با کلاس یا روش.
-
مثال:
describe Student do
-
گروه های همه آزمایشات مربوط به
Student
کلاس.
it
بلوک ها:
-
موارد آزمایش فردی را تعریف می کند.
-
مثال:
it has a name do
-
رفتار مورد انتظار آزمایش شده را توصیف می کند.
ادعاهای با expect
:
-
نتیجه واقعی را در برابر نتیجه مورد انتظار تأیید می کند.
-
نحو
expect(actual).to eq(expected)
-
مثال:
expect(student.name).to eq('Penelope')
همه نمونه ها با هم:
require 'rspec'
require './lib/student'
describe Student do
describe '#initialize' do
it 'has a name' do
student = Student.new('Penelope')
expect(student.name).to eq('Penelope')
end
end
end
🚦 صندلی: یک چارچوب آزمایش Mnemonic
هنگام نوشتن تست ، دنبال کنید جایگاه چارچوبی برای اطمینان از واضح و مؤثر بودن آنها:
حرفETUP: شرایط اولیه را برای آزمون آماده کنید.
مثال: student = Student.new('Penelope')
اشمیهXECUTION: با روشی که آزمایش می کنید تماس بگیرید.
مثال: student.add_cookie('Chocolate Chip')
بوهاSSertion: تأیید کنید که نتیجه با انتظار مطابقت دارد.
مثال: expect(student.cookies).to eq(['Chocolate Chip'])
حرفEardown: RSPEC به طور خودکار Teardown را کنترل می کند ، بنابراین نیازی به نگرانی در مورد تمیز کردن بعد از هر آزمایش نیست.
آزمایش مورد پویا و لبه
آزمون های مؤثر عملکرد پویا و ورودی های غیر منتظره را تشکیل می دهند. در اینجا آمده است که چگونه می توانید آزمون های دانشجویی خود را برای پوشش موارد بیشتر گسترش دهید:
مثال آزمون پویا
describe '#initialize' do
it 'can have different names' do
student1 = Student.new('James')
student2 = Student.new('Taylor')
expect(student1.name).to eq('James')
expect(student2.name).to eq('Taylor')
end
end
مثال آزمون موردی
اگر ورودی نامعتبر باشد ، می توانیم با اختصاص نام پیش فرض ، ورودی غیر منتظره را کنترل کنیم:
class Student
attr_reader :name, :cookies
def initialize(name)
@name = name.is_a?(String) ? name : 'Default Name'
@cookies = []
end
end
آزمون پرونده لبه:
it 'assigns a default name if given invalid input' do
student = Student.new(42)
expect(student.name).to eq('Default Name')
end
تمرینات فرمت: آنچه را که آموخته اید تمرین کنید
حالا نوبت شماست که برای یک کلاس جدید تست و اجرای تست ها را بنویسید!
Step 1: Create a Car class
In `lib/car.rb`:
class Car
attr_reader :make, :year
def initialize(make, year)
@make = make
@year = year
end
def drive
"Honk Honk!"
end
end
مرحله 2: مجموعه آزمون را بنویسید
در spec/car_spec.rb
:
require 'rspec'
require './lib/car'
describe Car do
describe '#initialize' do
it 'creates an instance of Car' do
car = Car.new('Toyota', 2020)
expect(car).to be_a(Car)
end
it 'has a make and year' do
car = Car.new('Honda', 2018)
expect(car.make).to eq('Honda')
expect(car.year).to eq(2018)
end
end
describe '#drive' do
it 'returns a driving sound' do
car = Car.new('Ford', 2022)
expect(car.drive).to eq('Honk Honk!')
end
end
end
چالش: آزمایش های بیشتری را برای رسیدگی به موارد لبه اضافه کنید ، مانند گذر از قالب های سال نامعتبر یا مقادیر غیر منتظره.
غذای اصلی
-
RSPEC یک چارچوب قدرتمند برای آزمایش کد یاقوت است و به شما کمک می کند تا زودهنگام اشکالات را بگیرید و برنامه های قابل اعتماد را حفظ کنید.
-
پیروی از چارچوب صندلی تضمین می کند که تست های شما واضح و مؤثر است.
-
آزمایش مورد پویا و لبه را تمرین کنید تا کد شما قوی تر شود.
-
عادات آزمایش مداوم با رشد پروژه های شما باعث صرفه جویی در وقت و تلاش می شود.
مراحل و منابع بعدی
-
پروژه های Ruby خود را بازپرداخت کنید تا شامل پوشش آزمون باشد.
-
آزمایش با مسابقات مختلف RSPEC مانند
.include
با.be_nil
وت.be_true
بشر
خواندن توصیه شده:
آزمایش مبارک! 🎯
این پست در ابتدا در وبلاگ Turing School ارسال شده است.
حتماً ما را در اینستاگرام ، X و LinkedIn -turing_school دنبال کنید