Sobes.tech
Middle

Miért nem szabad a 'this' kulcsszót használni a tesztautomatizálás kontextusában?

sobes.tech MI

Válasz az MI-től

A JavaScript tesztautomatizálás kontextusában a this kulcsszót nem ajánlott a teszt állapotára vonatkozó adatok tárolására vagy továbbítására (például aktuális felhasználó, hitelesítési státusz, oldal információk), mivel:

  1. Előre nem látható kontextus: A this értékét attól határozza meg, hogyan hívják meg a függvényt, nem attól, hol van deklarálva. Aszinkron kódban (Promises, async/await, callback-ek) vagy nyíl függvények használatakor a this értéke eltérhet a várttól. Ez nehezíti a hibakeresést és a kód karbantartását.

  2. Környezettől függő: Különböző teszt keretrendszerekben (Mocha, Jest, Cypress) és beállításoktól (szigorú mód) a this kontextus másképp viselkedhet. Ez megnehezíti a kód hordozhatóságát.

  3. Párhuzamos futtatás összetettsége: Ugyanazon tesztosztály vagy objektum példány használatával párhuzamos futtatás esetén a this felülíródhat más végrehajtási szál által, ami versenyhelyzetekhez és helytelen eredményekhez vezet.

A this helyett ajánlott:

  • Lokális változók a tesztesetekben.
  • Segédfüggvények argumentumaiként átadott változók.
  • Különálló objektumok vagy osztályok a státusz tárolására (pl. Page Objects).
  • Globális változók vagy singletonok (óvatosan, csak szükség esetén).

Példa problémára this-el aszinkron kódban:

// Mocha példával
describe('Hitelesítési teszt', function() {
  this.currentUser = null; // Állapot a `this`-ben tárolva

  it('be kell jelentkeznie', async function() {
    await login('testUser', 'password');
    this.currentUser = 'testUser'; // `this` a tesztkörnyezetre utal
  });

  it('profil ellenőrzése', async function() {
    // Itt `this` nem fog tartalmazni currentUser-t,
    // ha az 'be kell jelentkeznie' teszt aszinkron módon futott
    // vagy ha a függvény kontextusa megváltozott
    console.log(this.currentUser); // null vagy undefined lehet
  });
});

Jobb megközelítés: adatok átadása argumentumként vagy Page Objects használata:

// Segédfüggvény
async function checkUserProfile(userName) {
  // A felhasználó profiljának ellenőrzése
}

describe('Hitelesítési teszt', function() {
  it('be kell jelentkeznie és profil ellenőrzése', async function() {
    const user = 'testUser';
    await login(user, 'password');
    // Felhasználó átadása argumentumként
    await checkUserProfile(user);
  });
});