#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. Я обновил вопрос, включив соответствующие маршруты.