Node Express 测试模拟 res.status(status).json(obj)
Node Express testing mock res.status(status).json(obj)
我在尝试测试我的方法时遇到以下错误:
TypeError: Cannot call method 'json' of undefined
下面是我的代码,如果我从测试方法中删除 res.status,我会得到与 'status' 相同的错误。
我如何定义 'json' 这样我就不会在以下位置抛出异常:
res.status(404).json(error);
测试此功能时。
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);
status
方法恰好是 chainable method。可链接方法的约定是始终 return this
最后。在您的测试中,您模拟了 res.status
方法但忘记了 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;
}
}
我在尝试测试我的方法时遇到以下错误:
TypeError: Cannot call method 'json' of undefined
下面是我的代码,如果我从测试方法中删除 res.status,我会得到与 'status' 相同的错误。
我如何定义 'json' 这样我就不会在以下位置抛出异常:
res.status(404).json(error);
测试此功能时。
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);
status
方法恰好是 chainable method。可链接方法的约定是始终 return this
最后。在您的测试中,您模拟了 res.status
方法但忘记了 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;
}
}