Я бы хотел провести модульное тестирование (не проводить интеграционное тестирование с супер-тестом) поведение следующего кода, то есть, чтобы протестировать его, генерируется соответствующая ошибка, где это необходимо, и выдает данные, когда все в порядке, согласно имени входа в коде. Т.е. я хочу иметь следующие модульные тесты:
- «должен вернуть ошибку 500» - когда getCruises выдает ошибки
- «должен вернуть данные 200 и cruisesRes» - когда getCruises возвращает правильные данные
- 'должно возвращать 204' - когда cruisesRes 'undefined'
var Cruises = require("../data/cruises");
var logger = require('../utilities/loggers')
var cruises = new Cruises();
exports.cruises_get = function(req, res) {
const dbo = req.app.locals.dbo;
cruises.getCruises(dbo, function(err, cruisesRes) {
if (err) {
logger.error("GET /cruises : Error reading cruise db")
logger.error(" Error: " + err)
res.writeHead(500);
} else {
// Rread query-string params || default when not passed
var startDate = req.query.startDate || "0";
var endDate = req.query.endDate || "99999999";
var startPort = req.query.startPort || "";
var numDays = req.query.numDays || "99999999";
// Apply filtering based on query string params
cruisesRes = cruisesRes.filter(function(cruise) {
// Find matching cruise
return cruise.numDays <= numDays && cruise.startDate >= startDate && cruise.endDate <= endDate && cruise.startPort.includes(startPort);
});
if (typeof cruisesRes !== 'undefined') {
res.writeHead(200, {'Content-Type': 'application/json'});
res.write(JSON.stringify(cruisesRes, null, 3));
} else {
res.writeHead(204);
};
res.end();
}
});
};
Я просмотрел много учебников и документации по sinon и думаю, что это может быть сделано с заглушками sinon ( я на правильном пути?). Я пробовал разные комбинации. Мне кажется, я поставил getCruises, чтобы он возвращал ошибку, но я не могу правильно его использовать. Кажется.
context('/cruises', function() {
const Cruises = require('../data/cruises');
const cruisesS = new Cruises();
const cruises = require('../controllers/cruises')
it('should call /cruises GET controller', function() {
let res;
spy = cruises.cruises_get = sinon.spy();
cruises.cruises_get(null, res);
expect(spy.calledOnce).to.equal(true);
});
it('should test more', function() {
let res;
let mystub = sinon.stub(cruisesS, 'getCruises').yields(Error);
spy = cruises.cruises_get = sinon.spy();
cruises.cruises_get(null, res);
console.log(res);
});
});
, но я получаю:
Controllers
/cruises
✓ should call /cruises GET controller
undefined
✓ should test more
Любой указатель, как это сделать или где почитать о возможных решениях приветствуется.