使用MySql对Node Express API进行端点测试

使用MySql对Node Express API进行端点测试,mysql,node.js,express,jestjs,supertest,Mysql,Node.js,Express,Jestjs,Supertest,我正在使用express开发一个api,它与MySQL数据库接口以存储用户凭据 我有一个用于注册用户的端点,还有一个用于登录。当我在《邮递员》中测试这些产品时,它们的效果与预期一样 我想将单元测试添加到我的API中,以测试这些端点,然后在将来与CI集成 我按照指南使用jest和supertest添加端点测试。这在某种程度上起作用,但不是理想的解决方案。理想情况下,我希望使用内存中的数据库而不是实际的SQL连接来进行测试,这样我就可以为每个测试使用新的数据库状态。我正在努力在线查找有关如何在exp

我正在使用express开发一个api,它与MySQL数据库接口以存储用户凭据

我有一个用于注册用户的端点,还有一个用于登录。当我在《邮递员》中测试这些产品时,它们的效果与预期一样

我想将单元测试添加到我的API中,以测试这些端点,然后在将来与CI集成

我按照指南使用jest和supertest添加端点测试。这在某种程度上起作用,但不是理想的解决方案。理想情况下,我希望使用内存中的数据库而不是实际的SQL连接来进行测试,这样我就可以为每个测试使用新的数据库状态。我正在努力在线查找有关如何在express中实现这一点的信息

下面是我目前查询数据库以通过用户名查找用户的方式

const connection = require("./db.js");
User.getByUsername = (username, result) => {
  connection.query(
    `SELECT * FROM users WHERE username = "${username}"`,
    (err, res) => {
      if (err) {
        result(
          {
            status: 500,
            message: "Internal server error",
          },
          null
        );
        return;
      }
      if (res.length < 1) {
        // not found User with the username
        result(
          {
            status: 401,
            message: "Incorrect Login Credentials",
          },
          null
        );
        return;
      }

      //found user
      result(null, res[0]);
      return;
    }
  );
};
为测试配置内存中数据库的正确方法是什么?我如何指示我的测试使用测试数据库而不是实际的MySQL数据库

下面是一个示例测试:

const app = require('../server');

const supertest = require('supertest');
const request = supertest(app);

describe('testing user registration and login endpoints', () => {
    it('test login without token returns 401', async done => {
        const res = await request.get('/users');
        expect(res.status).toBe(401)
        done();
    });
})

您不会创建内存中的数据库。您可以创建一个常规数据库。
此数据库的表必须配置为使用“内存”作为数据库引擎。
对于测试,必须将此数据库添加到
const dbConfig
中,作为第二个项目,名为“test”,或“dev”以外的其他项目。在测试设置中,您使用此“测试”数据库

const app = require('../server');

const supertest = require('supertest');
const request = supertest(app);

describe('testing user registration and login endpoints', () => {
    it('test login without token returns 401', async done => {
        const res = await request.get('/users');
        expect(res.status).toBe(401)
        done();
    });
})