Testing will let you know if the app you have created will work as you have intended for the end-users. It’s tough to achieve perfection with everything, but the quality is something every developer should strive for. Testing your codes will help you better your software structure. Today, we are talking about unit testing in Vue, but before that, let’s dive right into understanding unit testing.
The three levels of testing are unit testing, integration testing, and end-to-end testing.
So what is unit testing? It is testing individual units of code free from code dependencies. For error-free, consistent code, unit testing is the first line of defense for developers.
It improves the maintainability of the code and is a fundamental part of the TDD (test-driven development) process.
To constantly execute the unit testing, it is combined with continuous integration. The unit test will help you find bugs and defects early in the development process, long before your app reaches the end user.
Many a time, it is not possible to test everything all the time. Therefore, the focus of testing should be more on the things your end-user will interact with, and get output from.
Inputs such as query strings, props, data, lifecycle methods, and data stores should be checked.
Outputs will include rendered output, data results, events, data store updates, and dispatches.
These key aspects will ensure a seamless experience for your end user. Unit testing complex logic will need updating during the code refactor.
Other things to keep in mind are,
For any Single page application framework like Vue, components are the integral parts. Therefore, the unit testing in Vue should be focused on testing these components in a Vue application.
For that, there are testing environments. The key aspects of any good test environment are as below:
These two fit all the aspects in the best possible way:
They make unit testing in Vue a walk in the park and not a chore. Choosing the right testing environment and framework will encourage you to test more components, and eventually, take you to a better product.
Let’s go deeper into Unit testing tools for Vue.
Unit test framework Vitest and utility library Vue Test Utils are the tools that you can use for unit testing in Vue.
In fact, Vitest can also be used for React, Svelte, Lit, and many more, apart from Vue. Its configuration with Vite makes the execution of the unit test faster. If a developer is familiar with JEst, Vitest would be easy to adapt as the Vites API is compatible with Jest.
These are Vue Test Utils functionalities to be aware of:
Vitest provides you with this set of functionalities:
Here, Vue Test Utils provide test utilities that are Vue-specific, and Vitest will provide the generic functionality to write these tests.
Now that you know the tools, here are some of the things to know about running the unit testing in Vue.
You can run tests in Vitest as follows (an example):
$ npm run test:unit
✓ src/components/__tests__/ProjectHeader.spec.js
✓ src/components/__tests__/ProjectBanner.spec.js
✓ src/components/__tests__/ProjectFooter.spec.js
✓ src/components/__tests__/App.spec.js
“test:unit”: “vitest run –environment jsdom”,
Here are some things you need to consider while unit testing in Vue.
It is important to know how much of your source code is actually getting tested when you unit test.
In Vitest, it is flagged with –coverage
After the unit test is run, the coverage will be reported with the number of statements, branches, functions, and lines that were part of your test.
Moreover, npm run test:ui will load these results in your default web browser to help you see where the coverage is missing in your unit test.
Some of the important aspects of your Unit testing in Vue are as follows.
These are the basic components of unit testing in Vue. We have discussed what unit testing is and why it makes sense for Vue. Which components should you be testing and what are the tools for unit testing in Vue? And finally, some things to keep in mind as you run your unit testing.
The most important takeaway here is to focus on the inputs and outputs concerning the end user and keep your code bug-free right at the earlier stages of development.