2015-08-12 3 views
2

Dans mon application hapijs j'ai peu d'itinéraires qui nécessitent un session, utilise hapi-auth-cookie plugin pour la stratégie d'authentification. Je veux ajouter quelques tests (via Lab) pour ces routes.hapijs-lab: Test d'un itinéraire avec une session valide

Je n'ai trouvé aucune documentation sur la façon dont je peux configurer un test (peut-être via before?) Pour ce scénario. Toute aide est appréciée. Merci d'avance.

+1

Vous pouvez suivre l'exemple @Gergo Erdosi mais ce https://medium.com/the-spumko-suite/testing-hapi-services-with-lab-96ac463c490a vaut également le détour. – Whisher

+1

Aussi cela peut aider http://codereview.stackexchange.com/questions/97975/hapi-lab-e2e-test-workflow – Whisher

Répondre

4

Si vous avez seulement besoin d'un utilisateur authentifié, simplement attribuer à l'utilisateur à la propriété credentials dans les tests:

var user = { ... }; 

server.inject({ method: 'GET', url: '/', credentials: user }, function (res) { 
    console.log(res.result); 
}); 

Voici un exemple qui le démontre:

var Bcrypt = require('bcrypt'); 
var Hapi = require('hapi'); 
var HapiAuthCookie = require('hapi-auth-cookie'); 

var server = new Hapi.Server(); 
server.connection({ port: 3000 }); 

var users = { 
    john: { 
     username: 'john', 
     password: '$2a$10$iqJSHD.BGr0E2IxQwYgJmeP3NvhPrXAeLSaGCj6IR/XU5QtjVu5Tm', 
     name: 'John Doe', 
     id: '2133d32a' 
    } 
}; 

var validate = function (request, username, password, callback) { 
    var user = users[username]; 
    if (!user) { 
     return callback(null, false); 
    } 

    Bcrypt.compare(password, user.password, function (err, isValid) { 
     callback(err, isValid, { id: user.id, name: user.name }); 
    }); 
}; 

server.register(HapiAuthCookie, function (err) { 
    server.auth.strategy('session', 'cookie', { 
     password: 'secret', 
     validateFunc: validate 
    }); 

    server.route({ 
     method: 'GET', 
     path: '/', 
     config: { 
      auth: 'session', 
      handler: function (request, reply) { 
       reply('hello, ' + request.auth.credentials.name); 
      } 
     } 
    }); 

    server.inject({ method: 'GET', url: '/', credentials: users.john }, function (res) { 
     console.log(res.result); 
    }); 
}); 

grande partie de la exemple a été prise à partir du Authentication Tutorial.

+1

Ajout de 'credentials' aux options' server.inject' travaillé! –

0

Pour mon besoin de session pendant les tests, j'ai créé hapi-session-inject. L'utilisation est la suivante

const server = new Hapi.Server(); 
const session = new Session(server); 

// Callback interface 
session.inject('/', (res) => { 
    ... 
}); 

// Promise interface 
return session.inject('/').then((res) => { 
    ... 
}); 

Espérons que cela aide.