Karatê - Como usar aninhado para cada um no karatê semelhante ao javascript
Quero fazer um loop pela estrutura json aninhada abaixo e atualizar todos os campos obrigatórios, no entanto, poderia fazer isso por meio do texto digitado, mas quero fazer isso no karatê JS, não vejo nenhum exemplo de como aninhar para cada um deles.
Desejo atualizar os dados de 26 períodos (aqui para facilitar a leitura, usei 3), com base no índice. Desejo atualizar o campo do período, ou seja, se (índice == chave), esses 26 períodos estão em cada atributo do carro. (NOTA: você novamente tem vários carros e vários atributos de carro e cada atributo de carro você tem 26 períodos de dados)
Não posso usar este Karatê - combine duas respostas dinâmicas apenas quando você tiver uma lista de matriz única e tiver menos dados
[
{
"cars": [
{
"name": "car 1",
"periodsData": [
{
"period": "5ed73ed31a775d1ab0c9fb5c",
"index": 1
},
{
"period": "5ed73ed31a775d1ab0c9fb5d",
"index": 2
},
{
"period": "5ed73ed31a775d1ab0c9fb5e",
"index": 3
}
]
},
{
"name": "car 2",
"periodsData": [
{
"period": "5ed73ed31a775d1ab0c9fb5c",
"index": 1
},
{
"period": "5ed73ed31a775d1ab0c9fb5d",
"index": 2
},
{
"period": "5ed73ed31a775d1ab0c9fb5e",
"index": 3
}
]
},
{
"name": "car 3",
"periodsData": [
{
"period": "5ed73ed31a775d1ab0c9fb5c",
"index": 1
},
{
"period": "5ed73ed31a775d1ab0c9fb5d",
"index": 2
},
{
"period": "5ed73ed31a775d1ab0c9fb5e",
"index": 3
}
]
}
],
"totalPeriodEprps": [
{
"period": "5ed73ed31a775d1ab0c9fb5c",
"index": 1
},
{
"period": "5ed73ed31a775d1ab0c9fb5d",
"index": 2
},
{
"period": "5ed73ed31a775d1ab0c9fb5e",
"index": 3
}
]
}
carId ="dfd"
]
This above array repeats
Digite o código do script
//periods is a map of index and values
async modifyCarsData(mid, id, periods, campaignData) {
//carData is a json file
carData.forEach(element => {
element.carId= id;
// Update all egrp periods
element.totalPeriodEGRPs.forEach(eGrpPeriod => {
// egrprd.period =
if (periods.size === element.totalPeriodEGRPs.length) {
periods.forEach((value, key) => {
if (key === eGrpPeriod.index.toString()) {
eGrpPeriod.period = value;
return true;
}
});
}
});
element.cars.forEach(carCell => {
// Logic for updating periods data
carCell .periodsData.forEach(periodAttribute => {
if (periods.size === carCell.periodsData.length) {
periods.forEach((value, key) => {
if (key === periodAttribute.index.toString()) {
periodAttribute.period = value;
return true;
}
});
}
});
});
});
Respostas
Não pense nisso como uma atualização, mas como uma transformação. Não estou usando seu exemplo porque não é necessariamente complicado. Aqui está um exemplo mais simples que fornece todos os conceitos de que você precisa:
* def data = [{ name: 'one', periods: [{ index: 1, value: 'a' },{ index: 2, value: 'b' }]}, { name: 'two', periods: [{ index: 1, value: 'c' },{ index: 2, value: 'd' }]}]
* def fnPeriod = function(x){ x.value = x.value + x.index; return x }
* def fnData = function(x){ return { name: x.name, periods: karate.map(x.periods, fnPeriod) } }
* def converted = karate.map(data, fnData)
* print converted
Quais impressões:
[
{
"name": "one",
"periods": [
{
"index": 1,
"value": "a1"
},
{
"index": 2,
"value": "b2"
}
]
},
{
"name": "two",
"periods": [
{
"index": 1,
"value": "c1"
},
{
"index": 2,
"value": "d2"
}
]
}
]
Se isso não funcionar para você, procure outra ferramenta. Karate é projetado para testes e afirmações, não fazendo o que você normalmente faz em linguagens de programação. E eu suspeito que você caiu na armadilha de escrever "testes superinteligentes", então leia isto:https://stackoverflow.com/a/54126724/143475