Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.05.2016, 17:19
Новичок на форуме
Отправить личное сообщение для Tolych Посмотреть профиль Найти все сообщения от Tolych
 
Регистрация: 19.05.2016
Сообщений: 1

Тестирование функции
Добрый день!

Не нашел соответствующего раздела по тестам функций, создал тему в этом разделе.

У меня есть функция 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 вызывался с данными параметрами?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение прототипа функции tsigel Общие вопросы Javascript 11 15.05.2014 01:03
Добавление функции внутрь другой функции Lion_astana jQuery 9 28.12.2013 14:33
Установить имя конструктора Андрей Параничев Общие вопросы Javascript 8 17.11.2011 10:09
arguments вызвавшей функции mister_maxim Общие вопросы Javascript 4 12.10.2010 16:21
Тестирование функции библиотеки AnimaJS Библиотеки/Тулкиты/Фреймворки 2 26.06.2008 22:45