Strapi testing with Jest. More examples #1.
In this article I’ll try to focus on pure examples of testing strategies in Strapi 3. It’s a continuation of previous medium post
For a more efficient (DRY) workflow I’m going to use the same straight-forward factories for mock objects and helpers to interact with strapi instance.
Strapi general helper was introduced in a previous article, yet this one is a bit extended.
JSON Web Token signed request
To get a Bearer token required for all authenticated requests you can either
/auth/local endpoint or
Strapi helper from above contains method
jwt to perform fetching the token
Allowing roles for test routes
A custom route and controller that is not public (needs JWT token in Request header) must be assigned to role — otherwise even for a valid token controller will throw Forbidden 403 error. The whole process is described in Authenticated request tutorial on Strapi documentation page. This information is saved in the database only.
During a tests we need to be able to mimic the administrator panel. Helper
grantPrivilage allows that.
Lets create an endpoint that for an authenticated user returns a text
Yet the test
will not work, because
/hi is not assigned to a role that
user is. The following code fix this
Testing sending emails
For testing if emails are sent and their content one need to create new provider— a mock one.
nodemailer-mock allows us to mock the
nodemailer and test what we need. Add module to dependencies with
yarn add nodemailer-mock and create a new config for
Examples (test files)
Below are first part of examples.
If the following file test checks if
- user can register
- user can login (jwt tokens are fine)
- user can confirm his account with received email with confirmation link
- user can’t login if account is not confirmed
e2e test, in the following sequence:
- Sends a request to register new user
- Tests if user exists in database now and it is not confirmed
- User should not be able to login at this stage
- Email is being sent
- Fetch and test confirmation link from email content
- Calling a
email-confirmationshould confirm user and return a
- Check in database if user in confirmed now, link from email was clicked
- Finally user can login in
Next file test if
- user can reset password with received email with reset link
- Send email to forgot password
- The code with new password on /auth/reset-password
- Change password
- Test if password has changed
This series of articles are going to be continued, so please stay tuned.