Testing SMS in Cypress: A Comprehensive Guide

Aswani Kumar - Jul 24 - - Dev Community

Introduction

Testing SMS functionality in web applications is crucial for ensuring reliable communication with users. Whether it's for verification codes, notifications, or alerts, SMS plays a vital role in user experience. In this post, we’ll explore how to test SMS functionality using Cypress, leveraging third-party services and tools to simulate and verify SMS messages effectively.

Why Test SMS Functionality?

  1. User Authentication: Ensure OTP (One-Time Password) for two-factor authentication is delivered correctly.
  2. Notifications: Verify that users receive important notifications via SMS.
  3. User Experience: Ensure the overall user experience is seamless when interacting with SMS-based features.

Challenges of Testing SMS

Testing SMS can be challenging due to:

  • Dependency on external services.
  • Inability to capture and verify actual SMS messages directly in the test environment.
  • The need to simulate different SMS scenarios and edge cases.

Setting Up SMS Testing in Cypress

To test SMS functionality in Cypress, we’ll use third-party services like Twilio or Mailosaur. These services provide APIs to send and retrieve SMS messages, allowing us to verify SMS content and behavior in our tests.

1. Using Twilio
Twilio is a popular cloud communication platform that offers SMS APIs. Here's how to set up and test SMS using Twilio in Cypress.

Step 1: Set Up Twilio Account

  • Sign up for a Twilio account.
  • Obtain your Account SID, Auth Token, and a Twilio phone number.

Step 2: Install Twilio SDK

npm install twilio --save-dev
Enter fullscreen mode Exit fullscreen mode

Step 3: Create Cypress Test
Create a Cypress test to send an SMS and verify its content using Twilio's API.

const twilio = require('twilio');

const accountSid = 'your_account_sid';
const authToken = 'your_auth_token';
const client = new twilio(accountSid, authToken);

describe('SMS Testing with Twilio', () => {
    it('should send and verify SMS', () => {
        // Send SMS
        client.messages.create({
            body: 'Your verification code is 123456',
            from: 'your_twilio_number',
            to: 'recipient_phone_number'
        }).then((message) => {
            cy.log('SMS sent:', message.sid);

            // Wait and verify SMS content
            cy.wait(10000); // Wait for SMS to be received

            client.messages.list({
                to: 'recipient_phone_number',
                limit: 1
            }).then(messages => {
                const latestMessage = messages[0];
                expect(latestMessage.body).to.equal('Your verification code is 123456');
            });
        });
    });
});
Enter fullscreen mode Exit fullscreen mode

2. Using Mailosaur
Mailosaur is another service that supports email and SMS testing. Here's how to set up and test SMS using Mailosaur in Cypress.

Step 1: Set Up Mailosaur Account

  • Sign up for a Mailosaur account.
  • Obtain your API key and Server ID.

Step 2: Install Mailosaur SDK

npm install mailosaur --save-dev
Enter fullscreen mode Exit fullscreen mode

Step 3: Create Cypress Test
Create a Cypress test to send an SMS and verify its content using Mailosaur's API.

const MailosaurClient = require('mailosaur');

const apiKey = 'your_api_key';
const serverId = 'your_server_id';
const client = new MailosaurClient(apiKey);

describe('SMS Testing with Mailosaur', () => {
    it('should send and verify SMS', () => {
        // Send SMS (using your application logic)
        cy.visit('/send-sms');
        cy.get('input[name="phone"]').type('your_mailosaur_phone_number');
        cy.get('button[type="submit"]').click();

        // Wait and verify SMS content
        cy.wait(10000); // Wait for SMS to be received

        client.messages.list(serverId).then(messages => {
            const latestMessage = messages.items[0];
            expect(latestMessage.body).to.contain('Your verification code is');
        });
    });
});
Enter fullscreen mode Exit fullscreen mode

Best Practices for Testing SMS in Cypress

  1. Use Test Phone Numbers: Use dedicated test phone numbers to avoid interfering with real users.
  2. Mock SMS Services: In environments where SMS sending is not feasible, mock the SMS service to simulate sending and receiving messages.
  3. Validate SMS Content: Ensure the SMS content, such as OTPs or notifications, is accurate and follows the expected format.
  4. Handle Edge Cases: Test various scenarios, including invalid phone numbers, message delivery failures, and delayed messages.
  5. Secure API Keys: Store API keys and sensitive information securely, using environment variables or Cypress’s cypress.json file.

Conclusion

Testing SMS functionality in Cypress is crucial for ensuring reliable communication and a seamless user experience. By leveraging third-party services like Twilio and Mailosaur, you can effectively simulate and verify SMS messages in your tests. Following best practices will help you create robust and maintainable tests, ensuring your SMS features work flawlessly.

Happy testing!

. . . . . . . . . . . . . . . . . . . . . . . . . .