Тестирование функции
Добрый день!
Не нашел соответствующего раздела по тестам функций, создал тему в этом разделе. У меня есть функция getTracks var pageConditions = require('./helpers').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); }); } Я хочу её протестировать. Для теста используется mocha, sinon var sinon = require('sinon'); var mock = require('mock-require'); var Controller = require('./controllers'); describe('method `getTracks`', function() { var controller; beforeEach(function() { getPageConditions = sinon.stub(); mock('./helpers', { getPageConditions: getPageConditions }); //мокаем метод getPageConditions из функции controller = Controller(); }); it('Получаем ответ если удовлетворяет условию condition ', function() { var req = { params: { page: 'fakeValue' }, var res = { json: sinon.spy(), set: sinon.spy() }; requestedUser: { getTracksAndCount: sinon.stub() } }; var conditions = { offset: 'fakeValueOffset', limit: 'fakeValueLimit' }; var result = { count: 'fakeValueCount', rows: 'fakeValueRows' }; getPageConditions.returns(conditions); //sinon.stub() имеет метод returns и он вроде как отрабатывает синхронно 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 удовлетворяют условию, если раскомментировать одно из оставшихся, тест падает. Я так понимаю, это происходит потому что данный код req.requestedUser.getTracksAndCount.returns(Promis e.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 }); Подскажите, каким образом можно протестировать эту функцию, чтобы проверить что res.set вызывался с данными параметрами? |
Часовой пояс GMT +3, время: 08:46. |