Sorun giderme
Her başlık gördüğünüz durumdan yola çıkar. Hepsi için -v, her kararı gerekçesiyle birlikte stderr'e yazar; bu log çoğu soruyu yanıtlar ve bize göndermeniz gereken de odur.
td affected --base origin/main -v
Test projesinin tamamı çalıştı
Çıktıda projeyi bulun: gerekçe yanında yazılıdır. Olağan nedenler derlemenin geneline etki eden bir dosya, projedeki C# dışı bir dosya, bir global using ya da reflection ile bulunan bir tiptir. Neler her şeyi çalıştırır sayfası hepsini listeler. -v logunda affects whole project: True gibi bir satır dosyanın adını verir.
Hiçbir kapsam haritası kullanılmadı
Harita olmadan seçim isimleri izler ve bu daha geniştir. Log, neden harita olmadığını söyler:
No coverage maps within 50 commits before the merge base: varsayılan branch'te yakın zamanda hiçbir şey kaydedilmemiş. Oradaki her push'ta bir harita kaydedin; action'ınrecordmodu bunu yapar.Ignoring the coverage map of … which is not an ancestor of the base: harita başka bir branch'ten, ya da bir force push'tan veya uzun süre yaşamış bir branch'ten öncesinden geliyor. Varsayılan branch'te yeniden kaydedin ya da--max-map-agedeğerini yükseltin.--maps-dir … does not exist: haritaları içeren klasör koşudan önce geri yüklenmemiş.- GitHub Actions'ta, haritaları tutan önbellek kayıtlarını listeleyebilmek için job'un
actions: readiznine ihtiyacı vardır.
Base commit bulunamıyor
TestDetta branch'inizi merge base ile karşılaştırır; bu yüzden ikisinin de geçmişine ihtiyaç duyar. Action şu mesajla durur:
TestDetta compares with a base commit and needs the full history. Use actions/checkout with fetch-depth: 0.
Checkout'u fetch-depth: 0 ile yapın. Diğer CI sistemlerinde shallow clone'ları kapatın ve hedef branch'i açık bir refspec ile fetch edin; her sistem için nasıl yapılacağı Diğer CI sistemleri sayfasında gösterilmiştir.
Beklenenden az test atlandı
- Harita merge base'den daha eski ve aradaki süreçte bir derleme ya da yapılandırma dosyası değişmiş: etkilenen projeler tamamen çalışır.
--drift-fallback nameise bunları isimlere göre daraltır. - Bir test sınıfı değişikliğe dokunmadan seçiliyor. İsim izleme temkinlidir: değişen tipin adını anan bir sınıf, kapsam verisi onu eleyecek olsa bile seçilir.
is not in the coverage map of … Record the map againgibi bir log satırı, haritanın o proje için güncel olmadığı anlamına gelir. - Merkezi bir yardımcı değişti. Paylaşılan bir base class ya da bir serializer gibi testlerin çoğunun çalıştırdığı kod, testlerin çoğunu seçer. Bu doğrudur.
Filtre hiçbir testle eşleşmedi
Bir projenin filtresi hiçbir test seçmediğinde TestDetta projeyi filtresiz olarak yeniden çalıştırır ve The filter for … matched no test; running it unfiltered loglar. Hiçbir şey kaçırılmaz, ancak bu bizim tarafımızdaki bir hatadır: lütfen -v logunu gönderin.
Squash merge'ler, rebase'ler ve force push'lar
Haritalar varsayılan branch'teki commit'ler için kaydedilir ve bir pull request, merge base'indeki ya da ondan önceki en yeni haritayı bulur. Bir squash merge ya da rebase, varsayılan branch'te yeni commit'ler oluşturur; bir sonraki push onlar için bir harita kaydeder, o zamana kadar pull request'ler önceki haritayı drift bridge üzerinden kullanır. Bir pull request branch'ine yapılan force push hiçbir şeyi değiştirmez: merge base yeniden hesaplanır.
Fork'lardan gelen pull request'ler
CI sistemleri fork'lardan gelen pull request'lere secret iletmez. Açık depolar lisansa ihtiyaç duymadığından onlar için hiçbir şey değişmez. Özel bir depoda lisanssız bir koşu, tıpkı TestDetta olmadan olacağı gibi tüm testleri çalıştırır.
Sorular
Seçimli bir koşunun code coverage'ı eksiksiz mi?
Hayır. Testleri atlayan bir koşu kısmi coverage üretir. Coverage'ı varsayılan branch'teki tam koşulardan yayımlayın; kayıt orada tüm testleri çalıştırır.
Testler yeniden denenebilir mi?
Evet, framework'ünüzün kendi yeniden deneme seçeneğiyle: -- sonrasındaki her şey dotnet test'e değiştirilmeden iletilir.
Seçilen testler paralel job'lara bölünebilir mi?
td affected --format commands, her test projesi için filtresiyle birlikte bir dotnet test komutu yazdırır. Satırları job'larınıza dağıtın.