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ć: