Golden file — test natijasining tasdiqlangan kutilgan nusxasini alohida faylda saqlab, keyingi bajarilish chiqishini shu fayl bilan solishtirish usuli. Snapshot test nomi ham ishlatiladi. U katta matn, JSON, HTML, compiler outputi, API schema yoki render qilingan tasvirni qo‘lda yuzlab assertion yozmasdan tekshirishga yordam beradi.
Ishlash jarayoni
Test actual output yaratadi, canonical formatga keltiradi va repositorydagi golden fayl bilan solishtiradi. Farq bo‘lsa test diff ko‘rsatadi. O‘zgarish kutilgan bo‘lsa developer yangi faylni review qilib tasdiqlaydi; faqat “update all” qilib qo‘yish testning ma’nosini yo‘qotadi.
Golden fayl kutilgan natijaning manbai bo‘lgani uchun uning birinchi versiyasi production kodidan ko‘r-ko‘rona generatsiya qilinmaydi. Noto‘g‘ri output tasdiqlansa regression sifatida muzlab qoladi.
Canonicalization
Vaqt belgisi, UUID, absolute path, dictionary tartibi va platforma newline’i har run’da farq qilishi mumkin. Test nondeterministik maydonni olib tashlaydi yoki barqaror qiymat bilan almashtiradi. JSON keylari saralanadi, timestamp fake clockdan olinadi.
Canonicalization haqiqiy xatoni yashirmasligi kerak. Barcha IDni olib tashlash reference noto‘g‘ri ekanini ko‘rsatmay qolishi mumkin. Faqat semantik jihatdan beqaror maydonlar normallashtiriladi.
Matn va struktura
Plain-text golden diff code reviewda oson. JSON yoki YAMLda whitespace emas, parsed struktura bo‘yicha taqqoslash mumkin. Keyin canonical serializer barqaror fayl yaratadi. Binary format uchun hex/semantic decoder yoki alohida comparator kerak.
HTML snapshot har attribute va markup o‘zgarishida yiqilishi mumkin. Testning maqsadi faqat muhim DOM semantikasi bo‘lsa, targeted assertion barqarorroq. Golden butun output contract hisoblanganda foydali.
Tasvir golden testi
Screenshot pixel-by-pixel taqqoslanganda font rendering, GPU, antialiasing va OS farqi noise yaratadi. Bir xil container, font va viewport ishlatiladi. Perceptual diff kichik thresholdga ruxsat berishi mumkin, lekin threshold haqiqiy bir-pixel regressiyani ham yashirishi ehtimol.
Farq tasviri expected, actual va heatmap bilan saqlanadi. Developer vizual ko‘rib tasdiqlaydi. Accessibility va interaction alohida test talab qiladi; chiroyli screenshot funksional tugma ishlashini isbotlamaydi.
Versiya nazorati
Golden fayl test kodi bilan bir repository va commitda versiyalanadi. Review diffi kutilgan contract o‘zgarishini ko‘rsatadi. Juda katta binary fayllar repositoryni shishiradi; artefakt storage yoki Git LFS ishlatilishi mumkin, lekin test offline/reproducible bo‘lishi hisobga olinadi.
Bir platformaga xos output bo‘lsa platforma bo‘yicha alohida golden saqlanadi yoki portable canonical format tanlanadi. Bitta faylni turli platforma navbatma-navbat yangilashi flaky diff keltiradi.
Xavfsizlik
Actual response’dan golden yaratilganda token, cookie, email yoki production ma’lumoti repositoryga tushmasligi kerak. Sanitization pipeline va secret scanner ishlatiladi. Maxfiy field mavjudligi alohida “chiqmasligi kerak” assertion bilan tekshiriladi.
Golden test contractdagi keng o‘zgarishni tez ko‘rsatadi, ammo diffni tushunib review qilish inson mas’uliyatidir.
Golden fayl hajmi
Bitta ulkan snapshotdagi kichik muhim farq uzun diff ichida yo‘qoladi. Output mantiqiy bo‘limlarga bo‘linishi yoki semantik comparator o‘zgargan pathlarni ko‘rsatishi mumkin. Juda mayda yuzlab snapshot esa reviewni parchalab yuboradi. Granularity contract boundaryga mos tanlanadi.
Yangilash vositasi
Test runner “received” faylni alohida yaratib, expectedni avtomatik bosib ketmaydi. Developer diffni ko‘rib, explicit accept qiladi. CI da update rejimi o‘chiq bo‘ladi. Accept qilingan fayl bilan test kodi bir commitda keladi va reviewer contract o‘zgarishini tasdiqlaydi.
Locale va vaqt zonasi
Formatlangan sana, son va saralash locale bo‘yicha farq qiladi. Golden test locale/timezone’ni pin qiladi yoki har kerakli locale uchun alohida expected saqlaydi. Unicode normalizatsiyasi bir xil ko‘ringan matnning byte diffini keltirishi mumkin; comparator maqsadga ko‘ra NFC kabi canonical formni ishlatadi.
Schema snapshoti
Database schema, OpenAPI yoki GraphQL introspection golden sifatida saqlansa, migration yoki API o‘zgarishi reviewda ko‘rinadi. Faqat tartib farqi noise bermasligi uchun obyektlar stable sort qilinadi. Snapshot o‘zgarishi backward compatibility analizini almashtirmaydi; removed field va type change alohida qoida bilan tekshiriladi.
Bog‘liq tushunchalar
Snapshot testing, Fixture, Regression testing, Visual testing, Canonicalization, Approval testing