Как использовать cy.fixture вместе с массивом, когда несколько записей в файле фикстуры JSON

\ Создал тестовый скрипт Cypress и настроил его для выполнения в цикле, как хотелось бы выполнить с несколькими наборами тестовых данных в фикстуре json. Если вы опускаетесь и видите, что cy.fixture работает только для первой записи, а тест выполняется дважды с первой записью в json (файл testdata) .anyhelp о том, как включить итерацию массива вместе с приспособлением, было бы полезно

var Launchindex = 0;
for (Launchindex = 0; Launchindex  < 2; Launchindex ++) {

describe('Launch  testsite',() => {

    it('try login using testdata', () => {

        cy.visit('https://xyzz')
        cy.title().should('contain','title check')
    })

    it('check url', () => {

        cy.url().should('contain','xyz')

    })

    it('enter details and submit', () => { 
        //Fixture loads the testdata setup in fixtures folder , so setup testdata required before executing test script   



        cy.fixture('testdata').then(testdata  => {

            const ModuleID = testdata[0].ModuleID 
            const LoginName = testdata[0].LoginName
            const gameid = testdata[0].gameid

        cy.get('#ModuleID').type(ModuleID)
        cy.get('#LoginName').type(LoginName)
        cy.get('#gameid').type(gameid)
        cy.get('#btnSubmit').click()

        })
    })

})

}

fixture file looks somethings like this 
[
{"id": 0,"ModuleID": "xxxx","LoginName": "xxxx","gameid": "xxxx"},
{"id": 1,"ModuleID": "yyy","LoginName": "yyy","gameid": "yyyy"}
]

person CypressAuto    schedule 04.05.2020    source источник


Ответы (1)


cy.fixture('testdata') будет оцениваться, когда Cypress выполнит его, поэтому цикл на верхнем уровне модуля работать не будет.

Вместо этого вы можете сделать это:

describe('Launch testsite', () => {
    it('enter details and submit', () => {
        cy.fixture('testdata').then(testdata => {
            testdata.forEach(data => {
                const ModuleID = data.ModuleID;
                const LoginName = data.LoginName;
                const gameid = data.gameid;

                cy.get('#ModuleID').type(ModuleID);
                cy.get('#LoginName').type(LoginName);
                cy.get('#gameid').type(gameid);
                cy.get('#btnSubmit').click();

                // in a real test you probably need to do some kind of assertion here
            });
        });
    });
});
person miklos_me    schedule 04.05.2020
comment
спасибо @miklos_me, но все еще не могу прочитать вторую запись из JSON - person CypressAuto; 04.05.2020
comment
@CypressAuto Вы хотите создать отдельные тестовые примеры для каждой записи в этом приспособлении? - person miklos_me; 04.05.2020
comment
предпочитаю иметь один тест и иметь возможность читать записи из json / любого другого формата одну за другой и выполнять .. любые предложения, как заставить его работать - person CypressAuto; 04.05.2020
comment
forEach () работает у меня вместо использования cy.fixture .. const testData = require (../ fixtures / testdata.json); - person CypressAuto; 04.05.2020
comment
Это действительно работает! Большое спасибо ! Заявлено следующее перед описанием: const testData = require("../../fixtures/multipleInputFields.json"), а затем testData.forEach((data) => { const message = data.message it('Test Case1', function(){ cy.log("data is:" + data) cy.get('#user-message').type(message).should('have.value', message) cy.get('#get-input > button').click() cy.wait(200) cy.get('span#display').should('have.text', message) }) }); - person Tripti Mittal; 26.05.2021