Вот класс контроллеров:
static async addCourse(req, res) {
if (!req.body.name) {
util.setError(statusCode.BAD_REQUEST, 'Please provide complete details');
return util.send(res);
}
const newCourse = req.body;
try {
const createdCourse = await CourseService.addCourse(newCourse);
util.setSuccess(statusCode.CREATED, 'Course Added!', createdCourse);
return util.send(res);
} catch (error) {
util.setError(statusCode.BAD_REQUEST, error.message);
return util.send(res);
}
}
Класс утилит:
export default class Util {
constructor() {
this.statusCode = null;
this.type = null;
this.data = null;
this.message = null;
}
setSuccess(statusCode, message, data) {
this.statusCode = statusCode;
this.message = message;
this.data = data;
this.type = 'success';
}
setError(statusCode, message) {
this.statusCode = statusCode;
this.message = message;
this.type = 'error';
}
send(res) {
// const result = {
// status: this.type,
// message: this.message,
// data: this.data,
// };
switch (this.statusCode) {
case status.OK:
return res.status(this.statusCode).json(this.data);
case status.CREATED:
return res.status(this.statusCode).json(this.data);
case status.SUCCESS_NO_CONTENT:
return res.status(this.statusCode).end();
case status.BAD_REQUEST:
return res.status(this.statusCode).json({
status: this.type,
message: this.message,
});
case status.NOT_FOUND:
return res.status(this.statusCode).end();
default:
return res.status(status.INTERNAL_SERVER_ERROR).end();
}
}
}
Тестовый случай контроллера:
it('should be able to create course', (done) => {
const request = {
body: {
id: 'f6859199-400b-48db-9a74-9071514ca3d2',
name: 'physics',
},
};
const response = {
};
response.status = function status() { return { json() {} }; };
let responseSpy = sinon.spy(response)
const addCourseStub = sinon.stub(courseService, 'addCourse').resolves(request);
CourseController.addCourse(request, response);
sinon.assert.calledWith(addCourseStub, request.body);
sinon.assert.called(responseSpy.status)
addCourseStub.restore();
done();
});
Я тестирую контроллер addCourse
. Для этого я проверяю 1. Если вызывается CourseService.addCourse
с правильными аргументами 2. И я слежу за объектом ответа и проверяю, вызывается ли status()
(из служебного класса)
Ожидается :
responseSpy.status
для вызова.
Получил: AssertError: expected status to have been called at least once but was never called
Что я делаю не так?
Я пытался использовать заглушки на Util class, он тоже не работал.
Вот ссылка на github для testcase - https://github.com/openmohan/nodejs-restapi/blob/master/test/server/controllers/course.spec.js
Версия Sinon - "^ 9.0.0"
Заранее спасибо за помощь.