mercredi 2 janvier 2019

Node.js - How to test HTTPS requests with promise

I started writing unit tests for my nodeJs application so i could learn about this concept. After writing some basic tests for simple functions (using Mocha and Chai) i want to move on to some more complex tests.

I have written a simple piece of code that can make a request using node's HTTPS module. That code looks like this:

const https = require('https')
 module.exports.doRequest = function (params, postData) {
  return new Promise((resolve, reject) => {
    const req = https.request(params, (res) => {
      let body = []
      res.on('data', (chunk) => {
        body.push(chunk)
      })
      res.on('end', () => {
        try {
          body = JSON.parse(Buffer.concat(body).toString())
        } catch (e) {
          reject(e)
        }
        resolve(body)
      })
    })
    req.on('error', (err) => {
      reject(err)
    })
    if (postData) {
      req.write(JSON.stringify(postData))
    }
    req.end()
  })
}

Now i want to invoke this method with the following parameters:

const PARAMS = {
    host: 'jsonplaceholder.typicode.com',
    port: 433,
    method: 'GET',
    path: `/todos/1`,
    headers: {
      Authorization: 'Bearer 123'
    }
}

And make the request like so:

getTodos = (PARAMS) => {
  return doRequest(PARAMS).then((result) => {
    if (result.errors) { throw result }
    return {
      'statusCode': 200,
      'body': JSON.stringify({ message: result.title }),
    }
  }).catch((error) => ({
      'statusCode': error.statusCode,
      'body': JSON.stringify({ message: error.message }),
    }
  ))
}

Now my question is how i can test this bit of code properly. I have looked on how to tackle this with the Nock.js libary but i don't have a good understanding on where to start. If anyone can point me in the right direction on how to start with writing some tests for this bit of code i will be thankfull.

Aucun commentaire:

Enregistrer un commentaire