Пересмешивать логин в каждом тесте на 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, который обычно возвращается, так что вы можете продолжить тестировать функциональность приложение.