Narine Poghosyan
Narine Poghosyan

Reputation: 893

How can I check email validation in cypress

I want to check validation for input element. Can I check if typing wrong or valid Email format in my input. Like this.

 cy.get('#email_signup').type(validateEmail())
         var email = "";
            var possible = "[email protected]";
            for (var i = 0; i < 10; i++)
            email += possible.charAt(Math.floor(Math.random() * possible.length));
            return email;
        }

        cy.get('.nextBtn').click();
        cy.get('.error-message').should('be.visible');

Upvotes: 2

Views: 6792

Answers (2)

user13874856
user13874856

Reputation:

First of all it's good to generate random emails, but the best way to do is have a set of emails in a array. (may be in a JSON) and loop through them and check for the email validity.

Eg:

{
"Email_1":"['[email protected]','valid']",
"Email_2":"['robotmail.com','InValid']",
}

Because then you know the email conditions you are testing. But if you want to go with a random email generation method. I totally agree with the Muditha Perera's answer. It works perfectly.

Upvotes: 2

Muditha Perera
Muditha Perera

Reputation: 1252

According to what you expect to do, you need two external functions to create emails and to get a valid state of emails. Then you need to loop the it hook throughout all the emails.

//Create Emails
//Did a small modification so that you can decied the email length you need
const emails = (val) => {
var email = "";
var possible = "[email protected]";
for (var i = 0; i < val; i++){
email += possible.charAt(Math.floor(Math.random() * possible.length));}
return email;
}


//validate emails
//I have used a general Regex here, use the regex you have used in your website insted

const validateEmail = (email) => {
var re = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
return re.test(email);
}

//Test Cases (I have added 10 loops so it will create 10 test cases)
//Change the test case count as much as you need
for (let index = 0; index < 10; index++) {
const TestEmail = emails(10)
const EmailState = validateEmail(TestEmail)
it("EmailTest -"+ TestEmail +" - " + EmailState,() => {
cy.get('#email_signup').type(TestEmail)
cy.get('.nextBtn').click();
    if(!EmailState){
         cy.get('.error-message').should('be.visible');
    }else{
         cy.get('.error-message').should('not.be.visible');
    }
})
}

Your method of creating emails is awesome. But make sure you add a separate test to check specific and valid scenarios as random emails might not cover them all

This is how the tests are going to look like.

enter image description here

Note: As I have mentioned earlier. It's always better to know your test data. So Without a random generation. Try to have a list of valid, invalid email scenarios with true false conditions And loop through them.

Upvotes: 2

Related Questions