Skip to content

How do I run a beforeEach in Cypress?

I’m currently building a test, and it seems that after the second and third test, the beforeEach is not getting the information that I need and is telling me that I’m having the following issue:

cy.type() can only accept a string or number. You passed in: undefinedLearn more

My file is the following:

describe('Test all', function () {

    beforeEach(() => {
        cy.fixture('onlineApp.json').then(function (data) {
            this.data = data
        })

        cy.fixture('onlineAppUsers.json').then(function (info) {
            this.info = info
        })

    })


    // Getting into the site to start testing

    it('Build remodel ', function () {

        // Get into the producs page
        Cypress.config().baseUrl
        cy.visit(Cypress.env('url_products'))

        cy.buildRemodel()
        cy.onlineappCreateProfileForm()
        cy.businessInfo()
        cy.logOut()

    })

    it('Buy a Business', function () {

        // Get into the login page
        Cypress.config().baseUrl
        cy.visit(Cypress.env('url_login'))

        // Login | Use the information from the Fixture file created at the time that we create an account

        cy.get('#email').type(this.data.email)
        cy.get('#password').type('Abcd1234')
        cy.get('.app-submit-btn-text').should('be.visible').click()

        // Start a new Application

        cy.get(':nth-child(2) > .small-text > a').should('be.visible').click()

        // Start Loan Application

        cy.buyBusiness()

        // Fill out form

        cy.get('#full_name').type(this.info.userGoodCredit.name)
        cy.get('#company').type(this.info.userGoodCredit.company)
        cy.get('#phone_number').type(this.info.userGoodCredit.phone)
        cy.get('#email')
        cy.wait(10000)
        cy.get('.app-submit-btn-text', { delay: 100 }).should('be.visible').click()
        cy.businessInfo()
        cy.logOut()


    })

    it('Expand a Business', function () {
        // Get into the login page
        Cypress.config().baseUrl
        cy.visit(Cypress.env('url_login'))

        // Login | Use the information from the Fixture file created at the time that we create an account

        cy.get('#email').type(this.data.email)
        cy.get('#password').type('Abcd1234')
        cy.get('.app-submit-btn-text', { time: 100000 }).should('be.visible').click()

        // Start a new Application

        cy.get(':nth-child(2) > .small-text > a').should('be.visible').click()

        // Start Loan Application

        cy.expandBusiness()

        // Fill out form

        cy.get('#full_name').type(this.data.fullName)
        cy.get('#company').type(this.info.userGoodCredit.company)
        cy.get('#phone_number').type(this.info.userGoodCredit.phone)
        

    })
    
  })

My issue starts after the Expand a Business test. I don’t know if I have to pass any other function under the beforeEach statement or if needs to be set up differently.

How should I use the beforeEach? This file was working before, but for some reason started to fail. Could you please advise?

Answer

The error message cy.type() can only accept a string or number. You passed in: undefined says the last part of the path is undefined, e.g this.data.fullName or this.info.userGoodCredit.company.

If this.data was undefined, you error would be cannot get property “fullName” of undefined, so your beforeEach() is probably ok.

It looks like there’s a typo in the property used in the test, or in the fixture object. Check with console.log(this.info.userGoodCredit) and console.log(this.data).