How to Integration Test Express Controllers with Supertest
Integration testing is an important part of ensuring the quality and reliability of your web applications. When it comes to testing Express controllers, Supertest is a popular tool that allows you to make HTTP requests and assert the responses in your tests. In this article, we will explore how to use Supertest to integration test Express controllers.
Setting up the project
Before we can start writing integration tests, we need to set up a simple Express project. First, install the necessary dependencies:
npm install express supertest --save-dev
Next, create a simple Express app with a couple of routes and controllers:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello, World!');
});
app.get('/users', (req, res) => {
res.json({ name: 'John', age: 30 });
});
module.exports = app;
Writing integration tests
Now that we have our Express app set up, we can write some integration tests using Supertest. Create a new test file and write tests for each of the routes and controllers:
const request = require('supertest');
const app = require('../app');
describe('GET /', () => {
it('responds with "Hello, World!"', (done) => {
request(app)
.get('/')
.expect(200)
.expect('Hello, World!')
.end(done);
});
});
describe('GET /users', () => {
it('responds with user data', (done) => {
request(app)
.get('/users')
.expect(200)
.expect('Content-Type', /json/)
.expect({ name: 'John', age: 30 })
.end(done);
});
});
Running the tests
Now that we have our integration tests in place, we can run them using a test runner such as Mocha. Simply run the following command in your terminal:
npm test
If all goes well, you should see the output of the tests and any failed assertions. This allows you to catch any bugs or unexpected behavior in your controllers before deploying your app to production.
Conclusion
Integration testing Express controllers with Supertest is a great way to ensure that your web applications are functioning as expected. By writing tests for each of your controllers, you can catch and fix any bugs before they affect your users. Happy testing!
You look like Putin the president of Russia 😁