0Pricing
Ruby Academy · Lekcja

Testowanie i wersjonowanie

Jakość i semver

Testowanie i wersjonowanie to bezpłatna lekcja Ruby Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Ruby Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Ruby Academy zawiera 4 lekcji w sumie.

Dlaczego testować gema?

Ponieważ z gema korzysta wiele projektów, błąd dotyka wszystkich użytkowników. Automatyczne testy pozwalają bez obaw zmieniać kod i potwierdzają, że gem nadal działa.

  • Testy dokumentują oczekiwane działanie.
  • Wykrywają regresje przed wydaniem.
  • Poważni użytkownicy wymagają ich przed przyjęciem gema.

Wybór frameworka

Dwa popularne rozwiązania to Minitest (dostarczany z Ruby i lekki) oraz RSpec (rozbudowany DSL, bardzo często używany). Oba są odpowiednie; należy wybrać jedno i dodać je jako zależność deweloperską w gemspecu.

Przykład z Minitest

Testy Minitest to zwykłe klasy z metodami asercji. Oto samodzielny przykład, który uruchamia logikę gema i sprawdza wynik.

require "minitest/autorun"

def greet(name)
  "Hi, " + name
end

class GreetTest < Minitest::Test
  def test_greet
    assert_equal "Hi, Sam", greet("Sam")
  end
end

Typowe asercje

Przydatne asercje Minitest:

  • assert_equal expected, actual
  • assert obj i refute obj
  • assert_nil value
  • assert_raises(Error) { ... }

Każdy test powinien sprawdzać jedno jasno określone działanie.

require "minitest/autorun"

class MathTest < Minitest::Test
  def test_addition
    assert_equal 4, 2 + 2
  end

  def test_truth
    refute_nil 5
  end
end

Uruchamianie i automatyzacja testów

Zwykle dodaje się zadanie Rake, aby polecenie rake test uruchamiało cały zestaw testów. Ciągła integracja uruchamia następnie to samo zadanie przy każdym pushu, na kilku wersjach Ruby, aby wcześnie wykrywać problemy.

Czym jest Semantic Versioning?

Semantic Versioning (semver) nadaje znaczenie numerowi wersji MAJOR.MINOR.PATCH:

  • MAJOR: niezgodne zmiany API.
  • MINOR: nowe funkcje zachowujące zgodność wsteczną.
  • PATCH: poprawki błędów zachowujące zgodność wsteczną.

Użytkownicy mogą dzięki temu bezpiecznie aktualizować gem.

Odczytywanie wersji

Dla wersji 2.4.1 major to 2, minor to 4, a patch to 1. Podział ciągu znaków pokazuje poszczególne części.

version = "2.4.1"
major, minor, patch = version.split(".")
puts "Major: " + major
puts "Minor: " + minor
puts "Patch: " + patch

Kiedy zwiększać poszczególne części

Reguły podejmowania decyzji:

  • Naprawiono błąd bez zmiany API? Należy zwiększyć patch.
  • Dodano funkcję, a dotychczasowy kod nadal działa? Należy zwiększyć minor i wyzerować patch.
  • Usunięto istniejące działanie lub je zmieniono? Należy zwiększyć major i wyzerować minor oraz patch.
def bump_minor(version)
  major, minor, _patch = version.split(".").map(&:to_i)
  major.to_s + "." + (minor + 1).to_s + ".0"
end

puts bump_minor("1.3.5")

Ograniczenia wersji

Użytkownicy przypinają wersję gema za pomocą operatorów w swoim Gemfile:

  • '~> 1.4' pozwala na wersje od 1.4 do, ale bez, 2.0 (ograniczenie pesymistyczne).
  • >= 1.4 pozwala na dowolną nowszą wersję.
  • = 1.4.2 blokuje dokładnie wskazaną wersję.

Operator pesymistyczny ~> jest najczęściej używany, ponieważ równoważy aktualizacje i bezpieczeństwo.

Prowadzenie dziennika zmian

Należy prowadzić plik CHANGELOG.md zawierający listę zmian w każdej wersji. Informuje on użytkowników, co dodano, co przestało działać i jak przeprowadzić migrację. Każdemu zwiększeniu wersji powinna towarzyszyć aktualizacja dziennika zmian.

Wersje przedpremierowe

Wersje takie jak 2.0.0.beta1 oznaczają niestabilne wersje podglądowe. Aby je zainstalować, użytkownicy muszą wyraźnie wyrazić zgodę, dzięki czemu można udostępniać wczesne wersje do testów bez wpływu na zwykłe instalacje.

version = "2.0.0.beta1"
puts "Pre-release? " + version.include?("beta").to_s

Szybkie sprawdzenie

Proszę sprawdzić swoją wiedzę o wersjonowaniu.

Podsumowanie: testowanie i wersjonowanie

W tej części poznano sposoby zapewniania niezawodności gema:

  • Należy pisać testy za pomocą Minitest lub RSpec oraz automatyzować je za pomocą Rake i CI.
  • Należy stosować semver: MAJOR.MINOR.PATCH.
  • Należy zwiększać właściwą część numeru w przypadku poprawek, funkcji lub zmian niezgodnych wstecznie.
  • Należy używać ograniczeń ~> i prowadzić dziennik zmian.

W następnej części opublikujemy gema w RubyGems.

Często zadawane pytania

Czy lekcja „Testowanie i wersjonowanie” jest bezpłatna?

Tak — pełny tekst „Testowanie i wersjonowanie” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Ruby Academy, przejdź na CoddyKit PRO. Kurs Ruby Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Testowanie i wersjonowanie”?

Jakość i semver Ćwiczysz Ruby Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Ruby Academy?

Nie wymagamy żadnego doświadczenia. Ruby Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Testowanie i wersjonowanie”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Ruby Academy?

Tak. Każda lekcja Ruby Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Struktura gema
  2. Pisanie kodu
  3. Testowanie i wersjonowanie
  4. Publikowanie w RubyGems
← Powrót do Ruby Academy