Как вы тестируете приложение Node JS с паспортной аутентификацией без особых усилий? - PullRequest
0 голосов
/ 18 марта 2020

При реализации функции «sureAuthenticated» в приложении Node JS всегда требуется, чтобы вошел в систему пользователь, а также для входа в Oauth2, для которого требуется сайт HTTPS, мне нужно развертывать свое приложение на хосте каждый раз, когда я хочу проверить маршрут. Как я могу непрерывно тестировать, не тратя время на развертывание?

1 Ответ

0 голосов
/ 18 марта 2020

Я реализовал промежуточное ПО для тестирования, которое позволяет мне обходить аутентификацию при локальном запуске, и у меня установлена ​​переменная среды для тестирования. Вот примеры кода:

Моя настройка

const express = require('express');
const expressLayouts = require('express-ejs-layouts');
const mongoose = require('mongoose');
const flash = require('connect-flash');
const session = require('express-session');
const passport = require('passport');
const MongoStore = require('connect-mongo')(session);
const cookieParser = require('cookie-parser');
const testconfig = require('./config/testconfig');
const { ensureAuthenticated } = require('../config/auth');

А затем типичный метод verifyAuthenticated выглядит так в моей аутентификации. js

module.exports = {
    ensureAuthenticated: function(req, res, next) {
        if (req.isAuthenticated()) {
            return next();  
        }
        req.flash('error_msg', 'Please log in to view this resource');
        res.redirect('/');
    }
}

, которая позволяет мне создать маршруты простым способом, подобным этому:

router.get('/dashboard', ensureAuthenticated, function(req, res) {
    res.render('dashboard', {name: req.user.id});
})

Важно отметить, что моя конкретная реализация паспорта дает мне переменную req.user.id, с которой я работаю, которая идентифицирует пользователя, который в данный момент вошел в систему. После создания маршрутов я теперь заблокирован и обязан всегда развертывать свое решение на моем хосте, в моем случае Herokuapps.com, который предлагает бесплатный хостинг для разработки.

Для тестирования.

Чтобы обойти аутентификацию локально, я использую пакет dotenv npm для установки переменных среды. мой файл .env выглядит следующим образом:

NODE_ENV='test'

Теперь я могу реализовать свое собственное промежуточное ПО, вы могли заметить строку:

const testconfig = require('./config/testconfig');

, которую я использую, вот код для этот testconfig. js:

module.exports = function () {
    return function (req, res, next) {
      // Implement the middleware function based on the options object
      if(process.env.NODE_ENV === 'test'){
        req.user = {
          id: 'testuser',
          battletag:'testbattletag'
        }
      }
      next()
    }
  }

Я заставляю приложение использовать его, вызывая:

app.use(testconfig());

И, наконец, я редактирую метод sureAuthenticated следующим образом:

module.exports = {
    ensureAuthenticated: function(req, res, next) {
        if(process.env.NODE_ENV === 'test'){
            return next();
        }
        if (req.isAuthenticated()) {
            return next();  
        }
        req.flash('error_msg', 'Please log in to view this resource');
        res.redirect('/');
    }
}

Все настроено и готово к go! Теперь я могу спокойно использовать nodemon, чтобы мгновенно увидеть изменения при разработке маршрутов, пока они еще готовы к производству. Все, что мне нужно сделать, это установить для переменной среды что-то вроде «production» в моем файле .env, например так:

NODE_ENV='production'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...