Navjot Singh
Navjot Singh

Reputation: 766

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;
};

Upvotes: 10

Views: 19105

Answers (3)

Mor Shemesh
Mor Shemesh

Reputation: 2887

Another way to solve this for a generic url, is to use regex:

// For:
app.get('/api/study/load/:id', handler);

// You can mock:
nock(baseURL).get(/\/api\/study\/load\/[a-zA-Z0-9\-]*/g)

// For a more complex example:
app.get('/api/study/load/:some-guid?param1=val1&param2=val2', handler);

// You can mock:
nock(baseURL).get(/\/api\/study\/load\/[a-zA-Z0-9\-]*\?param1=val1&param2=val2/g)

Upvotes: 3

atomic
atomic

Reputation: 51

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);

Upvotes: 5

Sunil Chaudhary
Sunil Chaudhary

Reputation: 4743

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.

Upvotes: 12

Related Questions