当前位置: 首页 > 知识库问答 >
问题:

使用SuperTest进行测试时维护会话

庄新翰
2023-03-14

我希望使用超级测试来测试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;

}

在我的应用程序中。js,我使用passport进行身份验证。身份验证后,我使用会话。REGENATE函数可重新生成会话ID,以避免会话固定。

登录的初始post请求顺利通过。但是,后续的GET请求“loggedIn”失败。此函数在内部使用req。passport中的isAuthenticated()函数。这总是返回false。

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

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

有人能帮我理解我在这里错过了什么吗。?

Am使用版本-Supertest@v6.0.1和passport@v0.4.1

共有1个答案

臧曜瑞
2023-03-14

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

本质上,supertest在不安全的端口中运行express,而我已经以其他方式配置了会话。理想情况下,我们必须先检查环境,然后再将此变量设置为false,如这里所示。

希望这能节省我花在别人身上的时间!

 类似资料:
  • 目标 建立一个 lesson8 项目,在其中编写代码。 app.js: 其中有个 fibonacci 接口。fibonacci 的介绍见:http://en.wikipedia.org/wiki/Fibonacci_number 。 fibonacci 函数的定义为 int fibonacci(int n),调用函数的路径是 ‘/fib?n=10’,然后这个接口会返回 ‘55’。函数的行为定义如下

  • 如何在restasured中设置会话属性?在我的应用程序代码中,我们有如下内容 String userId = request.getSession().getAttribute(“userid”) 如何在此处将 userId 设置为会话属性(在重新保证的测试用例中)? 如何为所有请求(多个后续请求)维护同一会话? 当我发送多个请求时,它认为每个请求都是新的,会话从服务器端失效,我想在后续调用之间

  • 我将使用托管进行实时测试,但我想保护访问并防止搜索引擎索引。例如(服务器目录结构)public_html: _private _bin _cnf _log _...(更多默认目录托管) testPublic css 图像 index.html < 我想index.html是可见的每个人和所有其他目录(除了testPublic)是隐藏的,受保护的访问和搜索引擎不索引。 目录"testPublic"我

  • 目前,我正在测试一个具有CRUD操作的类(例如)。按照后面使用的方法,我想按照创建、读取、更新和删除的顺序测试所有操作。 由于JUnit中测试用例的执行顺序依赖于JVM,所以我需要一些适当的方法来确保单元测试用例按照给定的顺序执行。 到目前为止,我提出了以下策略: > 在JUnit4中使用按名称的升序执行方法。然而,这需要重命名测试用例,而且对我来说似乎不是最好的方法,因为在未来需要添加更多的测试

  • 简介 在之前的章节我们实现了一个简单但是功能齐全的web项目、学习了如何使用Gradle来构建和运行这个项目。测试代码是软件开发周期中非常重要的一环,能够确保软件的行为能符合预期。这一章我将讲述如何使用Gradle来组织、配置和执行测试代码,学习如何写单元测试、集成测试和功能测试并把他们集成到项目构建中。 Gradle集成了很多Java和Groovy测试框架,在本章的最后你会用JUnit、Test