【问题标题】:NodeJS supertest access to session objectNodeJS超测访问会话对象
【发布时间】:2013-12-11 09:29:05
【问题描述】:

我正在使用 supertest 测试我的 Node.js 应用程序。在我的控制器中,我访问会话对象。为了发出有效的请求,这个会话对象需要填充一些数据。

控制器

        // determine whether it is user's own profile or not
        var ownProfile = userId == req.session.user._id ? true : false;

测试

it('profile', function (done) {
    testUserOne.save(function(error, user){

        request
            .agent(server)
            .get('/profile?userId=' + user._id)
            .expect('Content-Type', /html/)
            .expect(200)
            .expect(/Profile/)
            .end(done);
    })
});

问题

如何模拟 req/session 对象?

【问题讨论】:

    标签: javascript node.js session mocha.js supertest


    【解决方案1】:

    仅用作子应用,并在父应用调用您的 authenticated():

    var mockApp = express();
    mockApp.use(session);
    mockApp.all('*', function(req, res, next) {
        //authenticated(req, res, next);
        //OR
        req.session.uid = 'mock uid';
        next();
    });
    mockApp.use(app);
    

    您的所有路由都将在匹配之前进行身份验证!

    【讨论】:

    • 有趣的选项。 mockApp.use(app) 的目的是什么?难道我们不用将mockApp链接到主快递吗?
    • @nishant mockApp.use(app) 实际上是用原始应用程序扩展了 mockApp,因此将会话覆盖处理程序插入到原始应用程序中。值得注意的是,应该在测试中使用mockApprequest(mockApp)…。感谢您指出这一点!
    • 能否添加会话的实例化?
    【解决方案2】:

    这个新的库应该可以解决问题:

    您还可以查看superagent,它是supertest 的一部分。这是一个很好的教程:

    不想要另一个库?试试这个...

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 2015-11-08
    相关资源
    最近更新 更多