Reputation: 2245
I have an object like this:
runs =
{
"suites": [
{
"status": "fail",
"testcases": [
{
"status": "pass"
},
{
"status": "fail"
}
]
},
{
"status": "pass",
"testcases": [
{
"status": "pass"
}
]
}
]
}
I would like to retrieve the count of test case pass and fail (In the above case pass: 2, fail: 1). I tried the following to get the pass count:
runs.suites.filter(suite => {
suite.testcases.filter(testcase => {
return testcase.status === 'pass';
})
}).length
But it is giving me an incorrect result.
Upvotes: 0
Views: 68
Reputation: 3350
Try this
// Code goes here
runs =
{
"suites": [
{
"status": "fail",
"testcases": [
{
"status": "pass"
},
{
"status": "fail"
}
]
},
{
"status": "pass",
"testcases": [
{
"status": "pass"
}
]
}
]
};
var count = 0;
var test = runs.suites.filter(suite => {
suite.testcases.filter(testcase => {
(testcase.status=='pass')?count++:count;
})
return count;
});
console.log(test.length);
Upvotes: 1
Reputation: 92669
Try this:
var runs = {"suites": [{"status": "fail","testcases": [{"status": "pass"},{"status": "fail"}]},{"status": "pass","testcases": [{"status": "pass"}]}]};
const statuses = runs.suites.reduce((a, b)=> a.testcases.concat(b.testcases)).map(x=> x.status)
console.log(statuses.filter(x=> x === "pass").length) // 2
console.log(statuses.filter(x=> x === "fail").length) // 1
Upvotes: 1
Reputation: 3683
You can use Array#reduce
and take the count of pass/fail in an object {pass : 2, fail : 1}
var runs = {"suites": [{"status": "fail","testcases": [{"status": "pass"},{"status": "fail"}]},{"status": "pass","testcases": [{"status": "pass"}]}]};
var obj = runs.suites.reduce( (tot, curr)=> {
curr.testcases.forEach(tc=>{
tc.status === 'pass' ? tot.pass++ : tot.fail++;
});
return tot;
}, {pass : 0, fail : 0});
console.log(obj);
Upvotes: 0
Reputation: 386816
You could use an object for counting.
var runs = { "suites": [{ "status": "fail", "testcases": [{ "status": "pass" }, { "status": "fail" }] }, { "status": "pass", "testcases": [{ "status": "pass" }] }] },
count = {}
runs.suites.forEach(a =>
a.testcases.forEach(b =>
count[b.status] = (count[b.status] || 0) + 1));
console.log(count);
Upvotes: 1