如何在单元测试中安全地返回哈希令牌或敏感数据



我有一些密码重置功能,我正在重新编写,但添加了测试。

我的测试应该是:

  1. 在数据库中创建一个用户条目
  2. 在数据库中为该用户创建一个哈希令牌条目
  3. 验证哈希令牌是否与数据库中的条目匹配

最后一个(3(,我在测试时遇到了问题,因为通常情况下,我不会在生产中向用户(客户端(返回哈希令牌。相反,我会向我的任务工作者发送一个事件,并在内存中传递哈希令牌字符串,然后向他们发送一封带有秘密链接的电子邮件。

我的验证路线看起来像:

server.get('/api/v1/users/password/reset/:token', userPasswordReset.fetch)

因此,正如您所看到的,我需要从请求参数中获取token,这意味着我需要以某种方式将其发送回我(但仅在测试环境中,而不是在生产环境中(。

为了解决这个问题,在我的控制器中,我目前正在这样做:

return process.env.NODE_ENV === 'test'
? res.status(201).send({ token: record.token })
: res.status(201).end()

然而,我想知道是否有更安全的方法。我不喜欢在依赖env变量的生产代码中放入脆弱代码的想法。

我曾考虑过将令牌写入系统上的文件,但由于这些测试将在不同的环境中运行,我不确定基于虚拟文件系统的测试是否完全可靠。

您应该只测试您的公共API。您不会测试无效的场景。您可以在DB层测试令牌的哈希创建和存储。希望这能有所帮助。

最新更新