W końcu dobrze napisane testy z odpowiednią strukturą ładowania Composer

Potykałem się, czołgałem po ziemi, mając źle skonfigurowany projekt, nad którym powinienem był pracować. I wtedy zrozumiałem, jak powinienem uporządkować sposób ładowania klas.

Oto, co miałem wcześniej w moim projekcie:

{
  "autoload": {
    "psr-4": {
      "Ziumper\\App\\": "src/",
      "Ziumper\\App\\": "tests/"
    }
  }
}

Ale w ten sposób wszystkie moje klasy były ładowane do mapy autoload Composera. Wiedziałem, że musi być na to lepszy sposób. I oto co odkryłem:

{
  "autoload": {
    "psr-4": {
      "Ziumper\\App\\": "src/"
    }
  },
  "autoload-dev": {
    "psr-4": {
      "Ziumper\\App\\": "tests/"
    }
  }
}

W międzyczasie napotkałem kilka poważnych problemów — nie mogłem zadeklarować Traitów w folderze testów, a kopiowanie i wklejanie całego tego kodu było bardzo frustrujące. W końcu przeszedłem do kolejnej wersji:

{
  "autoload": {
    "psr-4": {
      "Ziumper\\App\\": "src/"
    },
    "exclude-from-classmap": ["tests/"]
  },
  "autoload-dev": {
    "psr-4": {
      "Ziumper\\App\\Tests\\Unit\\": "tests/unit",
      "Ziumper\\App\\Tests\\Integration\\": "tests/integration"
    }
  }
}

Jak to działa:

  • wszystkie deklaracje przechowywane są w folderze src, nawet te używane w testach — np. bazowe przypadki testowe, trait’y, data providery itd.,
  • testy integracyjne i jednostkowe korzystają z odniesień do src i wszystko działa bardzo sprawnie,
  • exclude-from-classmap to coś w rodzaju strażnika, który pilnuje, aby kod testowy nie został przypadkowo załadowany do produkcyjnego środowiska.

Myślę, że w ten sposób mogę w końcu zacząć budować coś… co naprawdę ma sens!




Podoba Ci się ten artykuł?

Oto kilka następnych artykułów, które mogą Ci się również spodobać:

  • Jak zintegrować GitHub Copilot do automatycznego generowania wiadomości commitów?
  • 🤓 Dlaczego programiści PHP kochają pustą linię na końcu pliku? Przegląd PHP #6
  • 🧹 Jak usunąć przepisy z sekcji `extra` w composer.json
  • 🧐 PHP, Liczby zmiennoprzecinkowe i Tajemnica -0.0 Przegląd PHP #5
  • PhpUnit willReturnMap - Przegląd PHP #4