与Internet上使用的大多数教程不同
app.post("/login", (req, res) => { ... });
我设置了这样的路线
import * as LoginController from './controllers/login/login';
app.post("/login", LoginController.postLogin);
在LoginController
中,它是
export function postLogin(req, res) {
...
}
因此,我想知道如何使用supertest对postlogin(req,res)
进行单元测试,而不需要从app.js
获取模块。exports=app
?
有没有可能做一些像这样的事
import request from "supertest";
import { postLogin } from "./login"; // we're in src/controllers/login/login.test.js
describe("POST Login", () => {
it("should return 200 OK", (done) => {
request(postLogin)
// some post data
.expect(200, done);
});
});
如果您的目的是实际对postlogin
进行单元测试,那么您只需模拟req/res
-对象并将它们传递给postlogin
方法。
describe("postLogin", () => {
it("should not reject and return expected data", async () => {
const reqMock = { path: "somePath", body: {} };
const resMock = {};
const result = await postLogin(req, res); // assuming that postLogin returns a promise
expect(result.someProperty).to.eql(tbd);
});
});
如果您的意图是通过超集发出实际请求并验证应用程序的响应(顺便说一下,这更像是集成测试而不是单元测试),那么除了需要app.js
并启动应用程序之外,没有其他选择。