javascript - Birim testlerini rastgele sırayla çalıştırmanın amacı nedir?
Karma'nın benim Angular projelerimdeki varsayılan davranışının Jasmine birim testlerini rastgele sırayla çalıştırmak olduğunu fark ettim. Testlerinizi rastgele sırayla çalıştırmanın, her seferinde aynı sırayla çalıştırmaya kıyasla avantajı nedir?
Cevap #1
Bazen testler, her test çalıştırıldığında sıfırlanmayan bir durumu değiştirir. Belki bir test, tüm testler tarafından paylaşılan bir global değişkeni değiştirir. Belki bir test veritabanına bir şey yazar ve test tamamlandığında bunu temizlemez. Bu şeyler olmamalıdır, ama bazen olur.
Örneğin:
// Stupid contrived example. Don't ever do this.
let num = 0
it('A', () => {
expect(num + 1).toEqual(1)
})
it('B', () => {
num = 10
expect(num + 2).toEqual(12)
})
it('C', () => {
expect(num + 3).toEqual(13) // passes if B is run before C, otherwise fails
})
Bu, her zaman önce test A'yı, sonra B'yi, sonra C'yi çalıştırırsanız iyi çalışabilir. Ama sadece test C'yi çalıştırırsanız garip şeyler olabilir. Test A ve B'nin yaptığı değişiklikler nedeniyle, hepsini birlikte çalıştırdığınızda C geçer. Ama sonra test C'yi tek başına çalıştırırsınız ve başarısız olur.
Ve şimdi terminal çıktına bakıyorsun, afallamış bir şekilde mırıldanıyorsun: "Test C nasıl başarısız olabilir ki?! Daha yeni geçti!"
Sıralamayı rastgele yapmak buna biraz yardımcı olur. Her test tamamen izole olmalıdır ve hangi sırayla çalıştıkları önemli olmamalıdır. Onları rastgele yapmak bu kötü durumu ortaya çıkarabilir.
Yani, sıralamanın önemli olmaması gerektiği göz önüne alındığında, o zaman neden sıralamayı rastgele yapmıyoruz?
