Lightning Web Components Testing with Jest

Lightning Web Components (LWC) is a framework for building fast, reusable, and efficient web components for Salesforce. One of the key features of LWC is the ability to easily test your components using Jest, a popular JavaScript testing framework. In this blog post, we will go over the importance of writing Jest tests for lwc, installation steps for setting up Jest in your LWC project, as well as some code examples.

There are several reasons why it is important to write tests for your LWC components using Jest:

  1. Ensures code quality: Writing tests for your components allows you to catch bugs and issues early on in the development process, which can save you time and resources in the long run. It also helps to ensure that your code is working as expected and that any changes you make do not break existing functionality.
  2. Facilitates refactoring: With a comprehensive test suite in place, you can feel more confident making changes to your code, such as refactoring, without fear of introducing new bugs.
  3. Promotes good development practices: Writing tests encourages you to think about your code in a more modular way, which can lead to better design and more reusable code.
  4. Helps with Continuous Integration/Continuous Deployment: Having tests in place can make it easier to automate the deployment process, as you can run the tests as part of your CI/CD pipeline to ensure that your code is working as expected before it is deployed to production.
  5. Easier debugging: With a good set of tests, it’s easier to identify where the problem is in the code and fix it faster.

Write Jest tests to:

  • Test a component in isolation
  • Test a component’s public API (@api properties and methods, events)
  • Test basic user interaction (clicks)
  • Verify the DOM output of a component
  • Verify that events fire when expected

Overall, the benefits of testing your LWC components with Jest are many, and can greatly improve the quality, maintainability, and reliability of your code.

Installation

Install <em><strong>sfdx-lwc-jest</strong></em> and its dependencies into each Salesforce DX project. sfdx-lwc-jest works in Salesforce DX projects only.

Prerequisites

Before installing <em><strong>sfdx-lwc-jest</strong></em>, install Node.js and npm.

  • Node.jsThis page lists two releases of Node.js. We recommend using the “LTS” (Long-Term Support) version, rather than the “Current” version.
  • npmWhen you install Node.js, npm also installs. You may need to update npm though, so visit the npm website for instructions.

Install Jest and Its Dependencies into Your Project with the Salesforce CLI

The simplest way to install Jest and its dependencies are to run the Salesforce CLI command sfdx force:lightning:lwc:test:setup. Run the command from the top-level directory of each Salesforce DX project. This command creates the necessary configuration files and installs the sfdx-lwc-jest package for you.

Install Jest and Its Dependencies Manually

If you work in an environment where you can’t use the Salesforce CLI, you can set up your test dependencies yourself.

To install sfdx-lwc-jest and its dependencies, run these commands once from the top directory of each Salesforce DX project.

npm install
npm install @salesforce/sfdx-lwc-jest --save-dev

By default, an SFDX project includes these script entries in the scripts block of its package.json file. If your project’s file doesn’t include them, add them.

{
...
"scripts": {
...
"test": "npm run test:unit",
"test:unit": "sfdx-lwc-jest",
"test:unit:watch": "sfdx-lwc-jest --watch",
"test:unit:debug": "sfdx-lwc-jest --debug",
"test:unit:coverage": "sfdx-lwc-jest --coverage",
...
},
...
}
view raw package.json hosted with ❤ by GitHub

Here’s a simple Lightning Web Component (LWC) called “c-hello-world” that displays the message “Hello, World!”:

<template>
<p>Hello, World!</p>
</template>
view raw simpleLWC.html hosted with ❤ by GitHub

And here’s a Jest test for the component:

import { createElement } from 'lwc';
import HelloWorld from 'c/helloWorld';
describe('c-hello-world', () => {
afterEach(() => {
// The jsdom instance is shared across test cases in a single file so reset the DOM
while (document.body.firstChild) {
document.body.removeChild(document.body.firstChild);
}
});
it('displays the correct message', () => {
// Create element
const element = createElement('c-hello-world', {
is: HelloWorld
});
document.body.appendChild(element);
// Get message from component
const message = element.shadowRoot.querySelector('p');
expect(message.textContent).toBe('Hello, World!');
});
});

To run the test, you can use the Salesforce CLI by executing the following command:

npm run test:unit

Run Tests Continuously During the Development

To run all tests for a single component every time you save changes, go to the component directory and run the sfdx-lwc-jest command with the –watch parameter. Use the entry that you added to the scripts block of your project’s package.json file when installing Jest and dependencies.

npm run test:unit:watch

Jest watches all component files for updates, and runs all relevant tests each time it detects a change.

In conclusion, testing your Lightning Web Components (LWC) with Jest is an essential step in ensuring the quality, maintainability, and reliability of your code. With the ability to catch bugs early on, facilitate refactoring, promote good development practices and make it easier to automate the deployment process, testing is a vital part of the development process. Installation of Jest is straightforward and the configuration is minimal, you can start writing tests for your components in no time. It’s also a great way to debug your code efficiently. By following the steps outlined in this blog post, you can easily set up Jest in your LWC project and begin writing tests for your components. With a comprehensive test suite in place, you can have peace of mind knowing that your code is working as expected and that any changes you make will not break existing functionality.

Thank you for reading this blog post on testing Lightning Web Components with Jest. We hope that you found the information provided to be useful and informative. If you would like to stay updated on similar topics, be sure to subscribe to our blog. By subscribing, you will receive notifications of new posts and updates, ensuring that you never miss out on the latest information and trends in LWC development. To subscribe, simply enter your email address in the subscription box on our website, and you will be added to our mailing list. We look forward to having you as a subscriber and continuing to provide valuable content for your development journey.

Join 153 other subscribers

Arun Kumar

Arun Kumar is a Certified Salesforce developer and Salesforce Champions (Platform Champions), a Computer Science graduate, working on the Salesforce platform and providing customer solutions using force.com as a Salesforce consultant/developer. He is the founder of SFDCLessons. :)

Leave a Reply