提问者:小点点

如何设置“supertest”来测试导入的函数?


与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);
    });
});


共1个答案

匿名用户

如果您的目的是实际对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并启动应用程序之外,没有其他选择。