Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add params with GET request using nock.js

I am trying to test if my API routes are working using nock.js to mock url requests.

My routing file routes according to the following logic:

app.get('/api/study/load/:id', abc.loadStudy );

'loadStudy' method in 'abc.js' is used to handle the below particular GET request. Hence, any GET request from a browser has a 'params' key with 'id' parameter that replaces ':id' in the URL. However, when I try to mock this GET request using nock.js I'm not able to pass this 'id' parameter in the request.

var abc = require('G:\\project\\abc.js');
var nock = require('nock');

var api = nock("http://localhost:3002")
          .get("/api/test/load/1")
          .reply(200, abc.loadStudy);

request({ url : 'http://localhost:3002/api/study/load/1', method: 'GET', params: {id : 1}}, function(error, response, body) { console.log(body);} ); 

My method makes use of 'params' key that is sent with request which I'm not able to mock. Printing 'req' in the below code just gives '/api/test/load/1' . How can I add 'params' to the GET request?

loadStudy = function(req, res) {
    console.log(req);
    var id = req.params.id;
};
like image 388
Navjot Singh Avatar asked Mar 17 '18 20:03

Navjot Singh


2 Answers

As per the official docs, you can specify querystring by

var api = nock("http://localhost:3002")
      .get("/api/test/load/1")
      .query({params: {id : 1}})
      .reply(200, abc.loadStudy);

Hope it helps.
Revert in case of any doubts.

like image 73
Sunil Chaudhary Avatar answered Sep 20 '22 13:09

Sunil Chaudhary


I just ran into a similar problem, and tried Sunil's answer. As it turns out, all you have to do is provide a query object you want to match, not an object with params property. I am using nock version 11.7.2

const scope = nock(urls.baseURL)
     .get(routes.someRoute)
     .query({ hello: 'world' })
     .reply(200);
like image 29
atomic Avatar answered Sep 21 '22 13:09

atomic