Аутентификация с модульным тестированием в Node и Express (паспорт) Использование Jasmine

#javascript #node.js #mongodb #unit-testing #jasmine

#javascript #node.js #mongodb #модульное тестирование #jasmine

Вопрос:

Я пытаюсь написать модульный тест для маршрута аутентификации моего веб-приложения. По какой-то причине время ожидания истекло. Более того, тестовый пользователь не создается в базе данных. Что я делаю не так? Должен ли я также указывать подключение к базе данных?

Вот код теста:

 var user;
var mongoose = require("mongoose");
var userSchema = require("../../models/user.js");
var User = mongoose.model("User", userSchema);

var request = require("supertest");
var server = request.agent("http://localhost:3000");

describe('User', function () {
  beforeEach(function(done) {
      user = new User({
        email    : "user@user.com",
        firstName: "Full Name",
        lastName : "Last Name",
        password : "pass11"
      });
      user.save(done)
    });
  describe('Login test', function () {
      it('should redirect to /', function (done) {
        agent
        .post('/login')
        .field('email', 'user@user.com')
        .field('password', 'pass11')
        .expect('Location','/')
        .end(done)
      })

      afterEach(function(done) {
        User.remove().exec();
        return done();
      });
  });
})
  

routes/index.js

 //module.exports = router;

var express = require('express');
var router = express.Router();

module.exports = function(passport){

    var isAuthenticated = function (req, res, next) {
            // if user is authenticated in the session, call the next() to call the next request handler 
            // Passport adds this method to request object. A middleware is allowed to add properties to
            // request and response objects
            if (req.isAuthenticated()){
                //console.log(next());
                return next();
            }
            // if the user is not authenticated then redirect him to the login page
            res.redirect('/login');
    }


    /* GET login page. */
    router.get('/login', function(req, res) {
        // Display the Login page with any flash message, if any
        res.render('login', { message: req.flash('message') });
    });

    /* Handle Login POST */
    router.post('/login', passport.authenticate('login', {
        successRedirect: '/',
        failureRedirect: '/login',
        failureFlash : true  
    }));

    /* GET Registration Page */
    router.get('/signup', function(req, res){
        res.render('register',{message: req.flash('message')});
    });

    /* Handle Registration POST */
    router.post('/signup', passport.authenticate('signup', {
        successRedirect: '/',
        failureRedirect: '/signup',
        failureFlash : true  
    }));

    /* GET Home Page when logged in */
    router.get('/', isAuthenticated, function(req, res){
        res.render('index', { user: req.user });
    });

    router.get('/user', function(req, res) {
        var data = {
            firstName: req.user.firstName,
            lastName: req.user.lastName,
            email: req.user.email,
            /* ... */
        };

        res.send([
            data
        ]);
    });

    /* Handle Logout */
    router.get('/signout', function(req, res) {
        req.logout();
        res.redirect('/login');
    });

    return router;
}
  

Комментарии:

1. Каков ваш экспресс-код? Что говорят журналы сервера?

2. Вы имеете в виду маршруты? Кроме того, какие журналы? Результаты командной строки?

3. да, маршрут входа, разве у вас не установлен какой-то серверный журнал (например, morgan)?

4. Нет, я этого не делаю. Должен ли я его установить? Я все еще изучаю Node.

5. Я обновил вопрос, включив соответствующие маршруты.