How to properly write the values of an array into a JSON file using writeFile in Cypress?

Solution 1:

It's a bit hard to tell for sure from the screenshot, but I think the array has non-standard properties attached (an Array is an object).

Try converting,

const keys = ['Alert', 'Dynamic Elements', 'Frames and Windows', etc]
const output = keys.reduce((acc, item) => {
  acc[item] = category[item]
  return acc
}, {})
cy.writeFile('cypress/fixtures/actionsName.json', output)

Just looked at your posted code - the problem is as expected, you're attaching the lists to the array as properties. The above should work, or you can clean up the way you gather the lists.

getActionName(){
    //let category = new Array();  // change this to an object
    let category = {};
    let actions = new Array();

    //Get all action name and store to json
    cy.get('.linkbox').each(($category) => {

        //Get category name
        const text = $category.find('.heading').text();
        cy.log("Category: " + text);
        //category.push(text);    // don't need this

        //Get each action name and push to the related category
        cy.wrap($category).find('ul li h2').each(($action) => {
            const text = $action.text();
            cy.log("Action: " + text);

            actions.push(text);
        }).then(() => {
            category[text] = actions;
            actions = [];
        })

    }).then(() =>{
        console.log(category);

        //!Only writes the top level array
        cy.writeFile('cypress/fixtures/actionsName.json', category);
    }) 
}