Node.js单元测试request.post(...).send不是函数

tv6aics1  于 2023-05-06  发布在  Node.js
关注(0)|答案(2)|浏览(164)

我开始使用chai和mocha测试我的node.js网站的组件,但是当我运行npm test时,我得到了这个错误:
'类型错误:request.post(...).send不是函数'
这是我的test.js文件中的代码:

const chai = require("chai");
const expect = chai.expect;
const app = require("./app.js");
const express = require("express");
const request = express();

describe("POST /register", () => {
  it("should register a new user and redirect to login page", (done) => {
    const user = {
      email: "johndoe@example.com",
      username: "johndoe",
      password: "password",
      userType: "user"
    };
    request.post("/register")
      .send(user)
      .end((err, res) => {
        expect(res.status).to.equal(302);
        expect(res.header.location).to.equal("/login");
        done();
      });
  });
});

我是Node.js的新手,所以我还在了解单元测试是如何执行的。任何帮助将是一个感激

wlp8pajw

wlp8pajw1#

request是Express路由器对象。request.post("/register")不是发送请求,而是在该路由器上注册一条路径。
你实际上要做的是发送一个请求。因为Express用于创建服务器,而不是发送请求,所以您必须使用不同的库。您的代码似乎试图使用supertest,这是一个发送请求的测试库。
要使用supertest,请首先将其与npm i supertest一起安装,然后更改

const request = express();

在代码中添加

const request = require('supertest');
xe55xuns

xe55xuns2#

这可能是因为request是express()的示例,而不是像supertest这样的请求库。
要解决这个问题,您可以request.post使用supertest库将www.example.com(“/register”)替换为请求,如下所示:

const request = require("supertest");
const app = require("./app.js");

describe("POST /register", () => {
  it("should register a new user and redirect to login page", (done) => {
    const user = {
      email: "johndoe@example.com",
      username: "johndoe",
      password: "password",
      userType: "user"
    };
    request(app)
      .post("/register")
      .send(user)
      .end((err, res) => {
        expect(res.status).to.equal(302);
        expect(res.header.location).to.equal("/login");
        done();
      });
  });
});

要获取地址,请使用以下语法

const app = require('./app');
const server = app.listen(3000, () => {
  const { address, port } = server.address();
  console.log(`Server running at http://${address}:${port}/`);
});

相关问题