Издевательство над каждым входом в систему в тесте мокко - nodejs

Я новичок в мокко и пытаюсь познакомиться с написанием тестов в мокко. У меня есть сценарий, в котором я в настоящее время использую Everyauth для аутентификации пользователей с использованием аутентификации Facebook. Таким образом, у меня может быть запрос к пользователям/профилю конечной точки, который показан ниже:

router.route('/profile')
  .get(function(req, res) {
    if(req.session.auth) {
      res.json({
        user: req.user.toObject({getters: true})
      });
    } else {
      res.status(HttpStatus.UNAUTHORIZED);
      res.json({
        message: 'You need to be logged in to view this information'
      });
    }
  });

Если бы я хотел протестировать эту конечную точку с помощью мокко и суперагента, как бы я это сделал? Как я смогу имитировать вход в систему с помощью Everyauth, используя структуру mocha.

В настоящее время у меня есть тест, который показан ниже:

  it('should return user information on being logged in', function(done) {
    superagent.get(url + '/users/profile').end(function(err, res) {
      expect(res.status).to.equal(200);
      expect(res.body).to.eql({
          users: // some user object
      });
      done();
    });
  });

Однако, если я не могу смоделировать вход в систему, я не могу проверить, возвращаются ли правильные данные через вызов конечной точки.


person kushaldsouza    schedule 18.09.2015    source источник
comment
Как выглядит успешный поток авторизации? Это означает, что вы можете имитировать вход в систему через Everyauth с помощью такого инструмента, как PostMan или Fiddler?   -  person KJ3    schedule 19.09.2015
comment
@ KJ3: Я не уверен, что полностью понимаю ваш вопрос, но я думаю, что это то, о чем вы меня спрашиваете. Успешный поток аутентификации с использованием модуля everyauth для аутентификации facebook включает отправку запроса на auth/facebook, который перенаправляет пользователя на страницу входа в facebook. При успешном входе в систему пользовательские данные передаются обратно в приложение js express/node через обратный вызов.   -  person kushaldsouza    schedule 19.09.2015
comment
@KJ3: Итак, мой вопрос: если я хочу протестировать конечную точку, для которой требуется аутентификация пользователя, как мне смоделировать действие аутентификации пользователя.   -  person kushaldsouza    schedule 19.09.2015


Ответы (1)


Конечно, одним из решений этой проблемы было бы имитировать модули аутентификации в целях тестирования с помощью среды имитации/заглушки, такой как очень популярный Синон заглушки. Sinon позволяет вам «переопределить» функцию, так что вместо того, чтобы эта функция работала, она возвращала то, что вы хотите, чтобы она возвращала.

Не будучи знакомым с Everyauth, вам нужно что-то вроде этого:

sinon.stub(everyauth, "authenticateUser").yields(null, {
    user: {
        firstName: 'John',
        // etc.
    }
});

Где Everyauth является основным объектом, authenticationUser — это метод, который вы хотите заглушить, а yields должен возвращать именно то, что обычно возвращает «authenticateUser», поэтому это может вернуть объект Facebook User, который обычно возвращается, чтобы вы могли продолжить тестирование функциональности приложение.

person KJ3    schedule 20.09.2015
comment
Благодарю за ваш ответ. Я попробую это и дам вам знать, как я справлюсь. - person kushaldsouza; 22.09.2015
comment
спасибо за вашу помощь, мне удалось сделать то, что я хотел, используя ваш ответ в качестве руководства. :) Мое решение можно найти здесь: github.com/kushaldsouza/scrumapp /blob/master/tests/users.js - person kushaldsouza; 02.10.2015