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;
};
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.
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With