J'ai créé une fonction qui compare deux tableaux et s'assure qu'ils ne sont pas égaux l'un à l'autre. J'exécute la fonction deux fois mais je dois admettre que c'est une très mauvaise conception, cependant, c'était la seule façon de la faire fonctionner. Existe-t-il un moyen plus simple d'accomplir la même chose? Peut-être un clonage profond avec lodash? Voici ma façon de faire.
let callCount = 0;
let values = [];
let values2 = [];
const getData = () => {
const chart = [{ //dynamic: changes the id numbers on second call
items: [{
id: 1,
name: 'foo'
}, {
id: 2,
name: 'bar'
}, {
id: 3,
name: 'bar'
}, {
id: 4,
name: 'bar'
}]
}];
if (callCount < 1) { //if and for block cannot be extracted for various reasons
for (let i = 0; i < 5; i++) {
const arr = chart[i].items[0];
arr.forEach((element) => {
values.push(element.id);
});
}
callCount++;
return values;
}
if (callCount >= 1) {
for (let i = 0; i < 5; i++) {
const arr = chart[i].items[0];
arr.forEach((element) => {
values2.push(element.id);
});
}
expect(values).to.not.eq(values2);
}
};
it ('Comparing two arrays', function () {
getData()
// logic that will change effectively change some of the values of `chart`
getData()
// is successful but wildly inefficient
}
Existe-t-il un moyen plus simple d'utiliser Javascript pour faire la même chose sans compter le nombre de fois que la fonction est appelée et exécuter à nouveau la même chose ?
Solution du problème
Renvoie le tableau à chaque fois et compare à la fin de la séquence,
const getData = () => {
const chart = [{ //dynamic: changes the id numbers on second call
items: [{
id: 1,
name: 'foo'
}, {
id: 2,
name: 'bar'
}, {
id: 3,
name: 'bar'
}, {
id: 4,
name: 'bar'
}]
}];
const arr = chart[i].items[0].map(element => element.id)
return arr;
};
it ('Comparing two arrays', function () {
const values1 = getData()
// logic that will change effectively change some of the values of `chart`
const values2 = getData()
expect(values1).to.not.eq(values2);
}
Je me demande comment chart
est changé - y a-t-il des cy.get()
commandes impliquées?
Si c'est le cas, vous devrez en renvoyer le résultat et imbriquer les résultats
it ('Comparing two arrays', function () {
getData().then(values1 => {
// logic that will change effectively change some of the values of `chart`
getData().then(const values2 => {
expect(values1).to.not.eq(values2);
})
})
}
Aucun commentaire:
Enregistrer un commentaire