【问题标题】:Maintaining session while testing using SuperTest使用 SuperTest 进行测试时保持会话
【发布时间】:2021-03-07 03:39:27
【问题描述】:

我希望使用 supertest 来测试 API 请求和响应。以下是我迄今为止尝试过的。

route.test.js

const testUtils = require('./setupTestUtils');
let authenticateUser = request.agent(app);
before(function(done){ 
testUtils.login(authenticateUser, userCredentials).then((res) => {
   expect(res.statusCode).to.equal(200);
   done();
}, (err) => {
   console.log(err);
   done(err);
});
});

setupTestUtils.js

function login (rest, testUserLogin) {
let defer = Q.defer();
rest.post('/login')
    .send(testUserLogin)
    .expect(200)
    .end(function () {
        rest.get('/loggedin')
            .expect((res) => {
                if (err) {
                    console.log('ERROR: ' + JSON.stringify(err));
                    defer.reject(err);
                } else {
                    defer.resolve(res);
                }
            })
            .end();
        });
return defer.promise;

}

在我的 app.js 中,我使用护照进行身份验证。身份验证后,我使用 session.regenerate 函数重新生成会话 ID 以避免会话固定。

登录的初始发布请求通过,没有任何失败。但是,随后的 GET 请求“loggedIn”失败。此函数在内部使用来自护照的 req.isAuthenticated() 函数。这总是返回 false。

经过调查,我发现重新生成的会话和请求对象(对于 req.isAuthenticated())之间的会话 ID 不同。

根据我的搜索,我了解到应该使用 supertest 的“代理”自动维护 cookie。然而,这对我来说似乎并非如此。我还尝试从初始响应中维护 cookie。这似乎对我也不起作用。 “ res.headers['set-cookie'] ” 以未定义的形式出现(也不知道为什么会这样)。

有人可以帮我理解我在这里缺少什么吗?

我正在使用版本 - Supertest @v6.0.1 和护照 @v0.4.1

【问题讨论】:

    标签: node.js mocha.js passport.js supertest


    【解决方案1】:

    我在 supertest 页面上提出的一个旧 github 问题中找到了我的问题的解决方案。链接here供参考。

    基本上,超级测试在不安全的端口中运行,否则我已经配置了我的会话。理想情况下,我们必须在将此变量设置为 false 之前检查环境 - 如 here 所示。

    希望这可以节省我花费的时间!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-15
      • 2023-04-09
      • 1970-01-01
      • 2011-01-26
      • 2018-01-15
      • 2022-01-21
      • 1970-01-01
      • 2016-04-29
      相关资源
      最近更新 更多