Ինչու չի կարելի օգտագործել 'this' բանալի բառը թեստավորման ավտոմատացման կոնտեքստում?
sobes.tech AI
Պատասխան AI-ից
Կոնտեքստում ավտոմատացման փորձարկումների JavaScript-ով, հիմնական բառը this չի խորհուրդվում օգտագործել փորձարկման վիճակի տվյալներ պահելու կամ փոխանցելու համար (օրինակ, ընթացիկ օգտվող, մուտքի կարգավիճակ, էջի տեղեկատվություն), քանի որ՝
-
Անհայտ կոնտեքստ:
thisարժեքը որոշվում է այն կերպով, ինչպես է կանչվում ֆունկցիան, ոչ թե այն վայրով, որտեղ այն հայտարարված է: Ասինխրոնային կոդում (Promis'ներ,async/await, callback-ներ) կամ սլաքային ֆունկցիաների դեպքում,thisարժեքը կարող է լինել այն, ինչ դուք սպասում եք: Սա բարդություններ է առաջացնում սխալների հայտնաբերման և կոդի պահպանման ժամանակ: -
Աշխատավայրի կախվածություն: Տարբեր թեստային ֆրեյմվորկներում (
Mocha,Jest,Cypress) և կարգավորումների (strict mode) դեպքում,thisկոնտեքստը կարող է տարբեր կերպ գործել: Սա բարդացնում է կոդի փոխանցելիությունը: -
Համաժամկետ կատարման բարդություն: Երբ միաժամանակյա փորձարկումներ են կատարվում նույն տիպի կամ օբյեկտի օրինակով,
thisկարող է վերագրանցվել այլ թոքերի կողմից, ինչը հանգեցնում է race conditions-ի և սխալ արդյունքների:
Փոխարեն this օգտագործելու, ավելի լավ է օգտագործել՝
- Տեղական փոփոխականներ փորձարկման դեպքերում:
- Փոփոխականներ, որոնք փոխանցվում են որպես արգումենտներ օգնական ֆունկցիաներին:
- Մասնագիտացված օբյեկտներ կամ դասեր վիճակի պահպանում համար (օրինակ, Page Objects):
- Գլոբալ փոփոխականներ կամ singleton-ներ (ուշադրություն դարձրեք, միայն անհրաժեշտության դեպքում):
Օրինակ this-ի հետ կապված խնդիրների մասին ասինխրոնային կոդում:
// Օրինակ Mocha-ի հետ
describe('Մուտքի փորձարկում', function() {
this.currentUser = null; // Վիճակը պահվում է `this`-ում
it('պետք է մուտք գործի', async function() {
await login('testUser', 'password');
this.currentUser = 'testUser'; // `this`-ը վերաբերում է փորձարկման կոնտեքստին
});
it('պետք է ստուգի պրոֆիլը', async function() {
// Այստեղ `this` չի պարունակելու currentUser,
// եթե փորձարկումը `պետք է մուտք գործի` կատարվի ասինխրոն
// կամ ֆունկցիայի կոնտեքստը փոխվի
console.log(this.currentUser); // Միգուցե null կամ undefined
});
});
Լավագույն մոտեցում՝ տվյալների փոխանցում որպես արգումենտներ կամ Page Objects օգտագործելն է:
// Օգնակա ֆունկցիա
async function checkUserProfile(userName) {
// Լոգիկա կոնկրետ օգտվողի պրոֆիլը ստուգելու համար
}
describe('Մուտքի փորձարկում', function() {
it('պետք է մուտք գործի և ստուգի պրոֆիլը', async function() {
const user = 'testUser';
await login(user, 'password');
// Օգտագործողի փոխանցում որպես արգումենտ
await checkUserProfile(user);
});
});