roadmap.az

Menyu

Testin əsasları

Davranışı yoxla

Test funksiyanın daxildə necə yazıldığını deyil, girişə görə gözlənilən nəticəni yoxlamalıdır. Sərhəd halı vacibdir: büdcəyə tam bərabər qiymət daxil edilməlidirmi?

import { expect, test } from 'vitest';
import { affordable } from './products';
test('büdcəyə bərabər məhsulu saxlayır', () => {
  expect(affordable([{ name: 'Kitab', price: 10 }], 10))
    .toEqual([{ name: 'Kitab', price: 10 }]);
});
Nümunə

Bir test uğursuz olduqda əvvəl gözlənilən nəticənin düzgünlüyünü yoxla. UI testində istifadəçinin görəcəyi mətn və etiketlərlə element seçmək detallara bağlı kövrək testləri azaldır.

Əlavə qeydlər və mənbələr

Kodun gözlədiyin kimi işlədiyini təkrarlana bilən yoxlamalarla göstər.

Niyə vacibdir?

Testlər dəyişiklik etdikdə əvvəlki davranışın pozulmasını vaxtında aşkar etməyə kömək edir.

Əvvəlki biliklər

Bu mövzuda

  • Unit və inteqrasiya testini fərqləndir
  • Normal, sərhəd və xəta hallarını seç
  • Arrange, act, assert ardıcıllığını tətbiq et
  • İstifadəçiyə görünən davranışı yoxla

Mənbələr

Məşqin idarəetməsi
Addım 1 / 2

Sərhəd halını yoxla

Yalnız adi girişlə kifayətlənmə; sərhəd və boş halı da yoxla.

Prosesi son vəziyyətə çatdır.

  1. Adi giriş
  2. Sərhəd
  3. Etibarsız giriş
Adi giriş

Funksiya 2,3 üçün 5 qaytarır.

sum(2, 3) === 5

Bu məşq prosesi modelləşdirir.

Özün sına

Məhsul filtri üçün normal nəticə, boş massiv və sıfır büdcə testləri yaz. Bir səhv əlavə edib testin uğursuz olduğunu gör.

Nəticəni necə yoxlayım?

Testlər həm düzgün nəticəni təsdiqləyir, həm də qəsdən əlavə etdiyin səhvi tutur.

Gözlənilən nəticə

  • Üç test ilk halda keçir.
  • <= əvəzinə < yazanda sıfır büdcədə pulsuz məhsul itir və test səhvi tutur.
Nümunə həllə bax

Əvvəl özün sına, sonra müqayisə et. Bu, mümkün həllərdən biridir.

Testlər normal, boş və sıfır büdcə hallarını ayrıca təsdiqləyir. Burada pulsuz məhsulun qiyməti sıfırdır.

filter.mjs

export function affordable(products, budget) {
  if (!Number.isFinite(budget) || budget < 0) return [];
  return products.filter(product => product.price <= budget);
}

filter.test.mjs

import test from 'node:test';
import assert from 'node:assert/strict';
import { affordable } from './filter.mjs';
const free = { title: 'Pulsuz', price: 0 };
const book = { title: 'Kitab', price: 12 };
test('normal nəticə', () => assert.deepEqual(affordable([free, book], 15), [free, book]));
test('boş massiv', () => assert.deepEqual(affordable([], 15), []));
test('sıfır büdcə', () => assert.deepEqual(affordable([free, book], 0), [free]));

terminal.sh

node --test filter.test.mjs
# filter.mjs-də <= yerinə < yaz və yenidən işə sal.
# Sıfır büdcə testi uğursuz olmalıdır; sonra <= qaydasını bərpa et.

Praktikanı bitirdin?Özün qiymətləndirirsən. İrəliləyiş bu brauzerdə saxlanılır.