5
ローカルログインをテストしようとしています。私はpassport.js
で実装しました。そのガイドの後に、MEANスケルトンの後に続いています。passport.jsとexpress.jsによるユニットテストログイン
私は、実装は問題ないとは確信していますが、常に認証に失敗するテストには何か問題があります。
認証は、認証が正しい場合は、「/サインイン」
が、それは行くべきであるためにリダイレクトされなければならない障害が発生した場合、「/」
しかし、私がテストしたときに、認証は常に失敗します。
module.exports = function(app, passport, auth) {
var users = require('../app/controllers/users');
app.get('/signin', users.signin);
app.post('/users/session', passport.authenticate('local', {
failureRedirect: '/signin',
failureFlash: 'Invalid email or password.'
}), users.session);
var index = require('../app/controllers/index');
app.get('/', index.render);
passport.js:
var mongoose = require('mongoose'),
LocalStrategy = require('passport-local').Strategy,
User = mongoose.model('User'),
config = require('./config');
module.exports = function(passport) {
//Serialize sessions
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findOne({
_id: id
}, '-salt -hashed_password', function(err, user) {
done(err, user);
});
});
//Use local strategy
passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'password'
},
function(email, password, done) {
User.findOne({
email: email
}, function(err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, {
message: 'Unknown user'
});
}
if (!user.authenticate(password)) {
return done(null, false, {
message: 'Invalid password'
});
}
return done(null, user);
});
}
));
}
及び試験:api.js:
var User, app, mongoose, request, server, should, user;
should = require("should");
app = require("../server");
mongoose = require("mongoose");
User = mongoose.model("User");
request = require("supertest");
server = request.agent("http://localhost:3000");
describe("<Unit Test>", function() {
return describe("API User:", function() {
before(function(done) {
user = new User({
email : "[email protected]",
firstName: "Full Name",
lastName : "Last Name",
password : "pass11"
});
user.save();
return done();
});
describe("Authentication", function() {
return it("Local login", function(done) {
return server.post("https://stackoverflow.com/users/session").send({
email : "[email protected]",
password: "pass11"
}).end(function(err, res) {
res.headers.location.should.have.equal("/");
return done();
});
});
});
return after(function(done) {
User.remove().exec();
return done();
});
});
});
ティ
これは、routes.jsありますsがどのようなターミナルディスプレイです:
<Unit Test>
API User:
Authentication
1) Local login
0 passing (24ms)
1 failing
1) <Unit Test> API User: Authentication Local login:
actual expected
/signin
うん!どうもありがとう!私の問題は 'server = request.agent(" http:// localhost:3000 ");'にありました。私は 'server = request.agent(app);'を入れました。それだけです! ;) –
私は非常によく似たログインと認証を持っています。私はこのコードを自分の必要に合わせて適応しようとしています。何らかの理由で、テストユーザーが自分のDBに作成されていません。これの原因は何でしょうか? – MadPhysicist
単体テストはテストのためのものです。プロセスは、新しいユーザーを挿入し、ログインテストを確認し、テスト後にユーザーを削除します。テストが完了した後、ユーザーは削除されるはずです。 –