hapijs-lab:使用有效会话测试路由



在我的hapijs应用程序中,我有几个需要session的路由,使用hapi-auth-cookie插件进行认证策略。我想为这些路由添加一些测试(通过Lab)。

我找不到任何关于如何为这种情况设置测试的文档(可能通过before ?)任何帮助都是感激的。

如果您只需要一个经过身份验证的用户,只需在测试中将该用户分配给credentials属性:

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

下面是一个示例:

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);
    });
});

这个例子的大部分来自认证教程

为了在测试期间需要session,我创建了happy -session-inject。用法如下

const server = new Hapi.Server();
const session = new Session(server);
// Callback interface
session.inject('/', (res) => {
    ...
});
// Promise interface
return session.inject('/').then((res) => {
    ...
});

希望能有所帮助。

最新更新