【发布时间】:2021-10-30 12:47:53
【问题描述】:
我正在努力做到这一点,因此当在我的 TypeScript API 中调用测试路由时,任何需要环境变量的代码都会被抽象出来,因此我们不会连接到任何真实的服务器等。
我的初始快递代码是
router.post("/hello", async (
req: express.Request,
res: express.Response,
next: express.NextFunction
) => {
const value = await getAValue(req.body)
...
}
getAValue() 函数使用环境变量,所以我正在使用 Supertest 为这条路线编写测试
import request from "supertest";
import App, { getAValue } from "./src";
describe("POST /hello", () => {
it("Returns 200 on expected input", (done) => {
const payload = {
"foo":"bar"
}
request(App)
.post("/api/hello")
.send(payload)
.expect(200)
.end((err) => {
if (err) {
done(err)
} else {
done();
}
});
});
});
我正在使用存根文件 test/stubs.ts 存根任何需要的函数
import sinon from "sinon"
import { getAValue } from "../src"
sinon.stub(getAValue);
并在我的package.json 中使用我的test 脚本来查找这些存根
"test": "mocha -r ts-node/register -r test/stubs.ts --config=test/.mocharc.json 'test/**/*.ts' --exit"
所以在getAValue() 函数中有一个
import * as env from "env-var";
const value = env.get("VAR_NAME").required().asString();
但我不知何故无法模拟与此相关的任何内容,并且总是得到相同的错误
ERROR: EnvVarError: env-var: "VAR_NAME" is a required variable, but it was not set
我尝试过模拟该函数,或者特别是对 process.env 的调用,但都不起作用。
为 Express 路由测试模拟环境变量的正确方法是什么?
【问题讨论】:
标签: node.js express unit-testing mocha.js sinon