我正在使用dotenv
来加载一个环境变量,该环境变量是一个API令牌。所有对此API的请求只有在它们的头中携带此令牌时才有效。
我已经尝试使用:
require("dotenv").config();
在我的app.js
文件中,并将我的启动脚本编写为:
"start": "node -r dotenv/config ./bin/www"
这是在.env
文件中加载环境变量的两种推荐方法。
使用这两种方法,我的API_TOKEN
环境变量在app.js
中可用,正如预期的那样。
我使用Jest进行测试,尽管我更喜欢摩卡咖啡,而且总是使用它。说这句话是为了让人们理解为什么我不确定我的问题是不是由于Jest。
我有这样的考验:
test("POST /cpf/* should fail when authorization token is wrong", async() => {
const data = { cpf: "927.059.107-78" };
await supertest(app)
.post("/cpf/verify")
.set("authorization","c68d357aaaaa8d82a29bade16ece0a1e")
.send(data)
.expect(500)
.then(async (response) => {
expect(response.body.mensagem).toBe("Request not authorized => invalid token.")
})
});
并且该测试特定于该中间件:
router.use(function (req, res, next) {
let { authorization } = req.headers;
if (authorization !== process.env.API_TOKEN) {
res.status(500).send({ mensagem: "Requisição não autorizada => token de autorização inválido." });
}
next();
});
如您所见,当authorization
令牌与存储在.env
文件中的令牌不同时,它应该阻止所有请求。
碰巧process.env.API_TOKEN
是undefined
,但它不应该是!
我想不出办法了。有什么建议吗?
1条答案
按热度按时间xqkwcwgp1#
这里的重点根本不是Jest,而是我的目录结构。
我使用的结构是这样的:
当我这样做的时候,我的想法是隔离测试,只停靠应用程序,而不停靠测试代码。
当我将
__tests__
目录移动到api
目录时,我的测试用例可以立即访问所有的环境变量。作为奖励,我可以删除文件
package.json
,package-lock.json
和目录node modules
在我的project_home
目录,因为他们不再需要了。我只需要用途:和
在我的
api
目录中。