मैं एक प्रतिक्रिया तालिका की लंबाई का परीक्षण करने की कोशिश कर रहा हूँ।

विशेष रूप से मैं चाहता हूं कि उपयोगकर्ता तालिका में एक नई पंक्ति जोड़ने के बाद इसकी लंबाई एक से बढ़ जाएगी

मेरे कोड में मैं तालिका के लंबाई मान को नहीं निकाल सकता और इसे चर पंक्तियों में सहेज सकता हूं ताकि इसे बाद में जांचा जा सके, मैं क्या गलत कर रहा हूं?

ऐसा लगता है कि पंक्तियाँ लंबाई एक वस्तु है न कि एक संख्या ..

const rowsLength = cy.get(".MuiTableBody-root").find("tr").its("length");

cy.get("#addRowButton").click();//new tr inserted

cy.get(".MuiTableBody-root").find("tr").should("have.length", rowsLength + 1);

enter image description here

0
user2298581 21 पद 2020, 16:34

2 जवाब

सबसे बढ़िया उत्तर

वेब ऐप की एसिंक्रोनस प्रकृति के कारण वैश्विक चर सेट करना अक्सर काम नहीं करेगा। डॉक्स इसे बैकफ्लिप करने के रूप में संदर्भित करते हैं।

इसे संभालने का सबसे विश्वसनीय तरीका या तो बंद करना या उपनाम के साथ है।

बंद

प्रत्येक सरू कमांड का उपयोग करने के लिए आप .then () का उपयोग करते हैं।

cy.get(".MuiTableBody-root").find("tr").its('length').then(intialLength => {

  // Code that uses initialLength is nested inside `.then()`

  cy.get("#addRowButton").click();
  cy.get(".MuiTableBody-root").find("tr").should("have.length", intialLength + 1);

})

उपनाम

आपको उस कोड को अलग करने की अनुमति देता है जो चर बनाता है उस कोड से जो इसका उपयोग करता है।

cy.get(".MuiTableBody-root").find("tr").its('length').as('intialLength');

cy.get("#addRowButton").click();

// other test code

cy.get('@intialLength').then(intialLength => {
  cy.get(".MuiTableBody-root").find("tr").should("have.length", intialLength + 1);
})

वैश्विक चर क्यों नहीं?

वैश्विक चर का उपयोग करना विरोधी पैटर्न है क्योंकि यह अक्सर परीक्षण कोड और कतारबद्ध आदेशों के बीच दौड़ की स्थिति बनाता है।

भाग्य से, आपका उदाहरण अधिकतर बार काम करेगा क्योंकि cy.get("#addRowButton").click() एक धीमा ऑपरेशन है।

लेकिन अगर आप परीक्षण करना चाहते हैं कि पंक्ति गणना नहीं बदली है, तो वैश्विक चर का उपयोग करना विफल हो जाएगा।

ये कोशिश करें

var intialLength = 0;
cy.get('table').find("tr").then((tr) => {
  intialLength = tr.length;
})

// Test that row count remains the same
cy.get('table').find("tr").should("have.length", intialLength);  
// fails because it runs before the variable is set

ऐसा इसलिए है क्योंकि परीक्षण कोड .get() और .find() कमांड की तुलना में बहुत तेज चलता है, जिन्हें DOM तक पहुंचना चाहिए।

हालांकि उपरोक्त उदाहरण मामूली है, याद रखें कि वेब ऐप्स स्वाभाविक रूप से एसिंक्रोनस हैं और बैकफ्लिप परीक्षण आसानी से विफल हो सकते हैं।

2
21 पद 2020, 23:24

find() के साथ आप कुछ ऐसा कर सकते हैं:

var tableLen = 0;
cy.get(".MuiTableBody-root").find("tr").then((tr) => {
    tableLen = tr.length,
})

और फिर:

cy.get("#addRowButton").click(); //new tr inserted
cy.get(".MuiTableBody-root").find("tr").should("have.length", tableLen + 1);
0
Alapan Das 21 पद 2020, 16:54