Пересмешивать логин в каждом тесте на mocha - 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();
    });
  });

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

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам