برنامه نویسی

آشنایی با آزمایش در یاقوت با 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 دنبال کنید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا