Search code examples
javascriptnode.jsexpressjestjssupertest

How do I manually set the value of a variable in a test (jest)?


app.test.js


I have the following code in my jest file:

'use strict';
const request = require('supertest');
const app = require('./app');

//https://stackoverflow.com/questions/1714786/query-string-encoding-of-a-javascript-object
function serialise (obj) {
    return Object.keys(obj).map(k => `${encodeURIComponent(k)}=${encodeURIComponent(obj[k])}`).join('&');
}
describe('Test other /', () => {
    test('POST /example succeeds (200 OK) if checkboxes are ticked', () => {
        const toSend = {
            check: 'Spiderman'
        };
        return request(app).post('/example')
             .send(serialise(toSend))
             .expect(200);
    });
});

The test is fine so far, but I would like to set a variable (in my node.js file) called Identifier equal to the value 1 for the duration of this particular test. How can I do this via jest? (I tried reading the documentation for jest and looked at similar question on SO but was unable to find a more specific answer).

app.js


node.js /example POST route:

app.post('/example', (req, res) => {
    var checked = req.body.check;
    var Identifier = req.app.get('identifier'); // Accessed like a global variable (value set in previous block of code).

    ...

});

Solution

  • You can use app.set(name, value) to do this. E.g.

    app.js:

    const express = require('express');
    const bodyParser = require('body-parser');
    const app = express();
    
    app.use(bodyParser.urlencoded({ extended: false }));
    app.post('/example', (req, res) => {
      const checked = req.body.check;
      const Identifier = req.app.get('identifier');
      console.log('Identifier:', Identifier);
      res.sendStatus(200);
    });
    
    module.exports = app;
    

    app.test.js:

    const request = require('supertest');
    const app = require('./app');
    
    function serialise(obj) {
      return Object.keys(obj)
        .map((k) => `${encodeURIComponent(k)}=${encodeURIComponent(obj[k])}`)
        .join('&');
    }
    
    describe('Test other /', () => {
      test('POST /example succeeds (200 OK) if checkboxes are ticked', () => {
        const toSend = {
          check: 'Spiderman',
        };
        return request(app).post('/example').send(serialise(toSend)).expect(200);
      });
      test('POST /example succeeds (200 OK) if Identifier is set', () => {
        const toSend = {
          check: 'Spiderman',
        };
        app.set('identifier', 1);
        return request(app).post('/example').send(serialise(toSend)).expect(200);
      });
    });
    

    integration test results:

     PASS  stackoverflow/61373586/app.test.js (12.805s)
      Test other /
        ✓ POST /example succeeds (200 OK) if checkboxes are ticked (159ms)
        ✓ POST /example succeeds (200 OK) if Identifier is set (9ms)
    
      console.log stackoverflow/61373586/app.js:9
        Identifier: undefined
    
      console.log stackoverflow/61373586/app.js:9
        Identifier: 1
    
    Test Suites: 1 passed, 1 total
    Tests:       2 passed, 2 total
    Snapshots:   0 total
    Time:        14.642s