Добрый вечер уважаемые пользователи и читатели!
Столкнулся с такой проблемой, что никак не пойму как протестировать функцию контроллера - getTracks. Код данной функции следующий:
var Promise = require('bluebird');
var Errors = require('./errors');
var pageConditions = require('./sequelize').getPageConditions;
function getTracks(req, res, next) {
var conditions = pageConditions(req.params.page, 10);
req.requestedUser.getTracksAndCount(conditions)
.then(function(result) {
res.set('X-Total-Count', result.count);
res.set('X-Offset', conditions.offset);
res.set('X-Limit', conditions.limit);
res.json({
status: 'OK',
data: result.rows
});
})
.catch(function(err) {
next(err);
});
}
Код теста ниже:
var assert = require('assert');
var sinon = require('sinon');
var Promise = require('bluebird');
var appPath = './app';
var mock = require('mock-require');
var Controller = require(appPath + '/users');
describe('User controller', function() {
describe('method `getTracks`', function() {
var controller;
var getPageConditions = sinon.stub();
beforeEach(function() {
getPageConditions = sinon.stub();
mock(appPath + '/helpers/sequelize', {
getPageConditions: getPageConditions
});
controller = Controller();
});
it('response track list if user have tracks by condition', function() {
var req = {
params: {
page: 'fakeValue'
},
requestedUser: {
getTracksAndCount: sinon.stub()
}
};
var res = {
set: sinon.spy(),
json: sinon.spy(),
};
var next;
var conditions = {
offset: 'fakeValueOffset',
limit: 'fakeValueLimit'
};
var result = {
count: 'fakeValueCount',
rows: 'fakeValueRows'
};
getPageConditions.returns(conditions);
req.requestedUser.getTracksAndCount.returns(Promise.resolve(result));
controller.getTracks(req, res, next);
assert(getPageConditions.called);
assert(req.requestedUser.getTracksAndCount.calledWith(conditions));
assert(res.set.calledWith('X-Total-Count', result.count));
assert(res.set.calledWith('X-Offset', conditions.offset));
assert(res.set.calledWith('X-Limit', conditions.limit));
});
});
});
Тест выполняется если закоментировать
assert(res.set.calledWith('X-Total-Count', result.count));
assert(res.set.calledWith('X-Offset', conditions.offset));
assert(res.set.calledWith('X-Limit', conditions.limit));
Подскажите, каким образом возможно протестировать что res вызвался именно с этими значениями? Я так понимаю, res.set не срабатывает, так как
req.requestedUser.getTracksAndCount.returns(Promise.resolve(result));
возвращает промис с результатом - result и все последующие действия
res.set('X-Total-Count', result.count);
res.set('X-Offset', conditions.offset);
res.set('X-Limit', conditions.limit);
res.json({
status: 'OK',
data: result.rows
});
в функции не совершаются