Node Rapid Testing mock res.status (status) .json (obj)

When trying to test my method, the following error appears:

TypeError: cannot call 'json' method from undefined

Below is my code, I would get the same error for "status" if I remove res.status from the test method.

How to define 'json', so I am not getting an exception:

res.status (404) .json (error);

when testing this feature.

stores.js

{ //the get function declared above (removed to ease of reading) // using a queryBuilder var query = Stores.find(); query.sort('storeName'); query.exec(function (err, results) { if (err) res.send(err); if (_.isEmpty(results)) { var error = { message: "No Results", errorKey: "XXX" } res.status(404).json(error); return; } return res.json(results); }); } 

storesTest.js

 it('should on get call of stores, return a error', function () { var mockFind = { sort: function(sortOrder) { return this; }, exec: function (callback) { callback('Error'); } }; Stores.get.should.be.a["function"]; // Set up variables var req,res; req = {query: function(){}}; res = { send: function(){}, json: function(err){ console.log("\n : " + err); }, status: function(responseStatus) { assert.equal(responseStatus, 404); } }; StoresModel.find = sinon.stub().returns(mockFind); Stores.get(req,res); 
+11
source share
1 answer

The status method is a chain method . The convention for chain methods should always return this at the end. In your tests, you res.status method but forgot its return this; ,

 res = { send: function(){ }, json: function(err){ console.log("\n : " + err); }, status: function(responseStatus) { assert.equal(responseStatus, 404); // This next line makes it chainable return this; } } 
+16
source

Source: https://habr.com/ru/post/1211543/


All Articles