Derse geri dön

Testteki hatayı bulun?

önem: 5

Aşağıdaki üs fonksiyonunda ne hatası vardır?

it("x'in n. kuvvetini alir", function() {
  let x = 5;

  let result = x;
  assert.equal(us(x, 1), result);

  result *= x;
  assert.equal(us(x, 2), result);

  result *= x;
  assert.equal(us(x, 3), result);
});

Not: Yazım olarak test doğrudur.

Bu test programcıların test yazarken onları cezbedecek yanlış yöntemleri göstermektedir.

Burada aslında 3 tane test var, fakat bunların hepsi bir fonksiyon içine tıkıştırılmış

Bazen böyle yazmak kolay olsa da bir hata olursa bu gizli saklı kalır ve nerede hata olduğu anlaşılamaz.

Eğer karmaşık bir akış içinde bir hata olursa ve bunun nedenini testler vasıtasıyla çözmeye çalışırsanız, testleri ayıklamanız gerekir.

Bunun yerine testi birden çok it bloğuna ayırırsanız bu problemden kurtulursunuz.

Bunun gibi:

describe("x'in n. kuvvetini alir", function() {
  it("5'in birinci kuvveti 5'tir", function() {
    assert.equal(us(5, 1), 5);
  });

  it("5'in ikinci kuvveti 25'tir", function() {
    assert.equal(us(5, 2), 25);
  });

  it("5'in üçüncü kuvveti 125'tir", function() {
    assert.equal(us(5, 3), 125);
  });
});

Soruda tek bir it vardı. Bu birçok it bloğu ile değiştirildi. Eğer şimdi bir yanlış olursa yanlışın neden kaynaklandığı daha açık bir biçimde görünür.

Ayrıca sadece tek bir it bloğu çalıştırmak istiyorsanız Mocha bunu it.only ile yapmanızı sağlar.:

describe("Raises x to power n", function() {
  it("5'in birinci kuvveti 5'tir", function() {
    assert.equal(us(5, 1), 5);
  });

  // Mocha will run only this block
  it.only("5'in ikinci kuvveti 25'tir", function() {
    assert.equal(us(5, 2), 25);
  });

  it("5'in üçüncü kuvveti 125'tir", function() {
    assert.equal(us(5, 3), 125);
  });
});