【问题标题】:MySQL query in Supertest returning {sql, bindings} instead of resultsSupertest 中的 MySQL 查询返回 {sql, bindings} 而不是结果
【发布时间】:2020-08-31 08:19:12
【问题描述】:

我正在针对查询 mysql 数据库的路由运行 supertest + jest,在本地运行。通过失眠测试返回正确的信息,但我的数据库查询在使用 supertest 时都没有返回正确的值。

// test.js

import request from 'supertest';
import db from '../database';
import app from './app';

describe('/', () => {
  test('should return db results', async () => {

    const mock = jest.spyOn(db, 'query');

    const response = await request(app).get(`/`)

    console.log(response.error);
    expect(dbMock).toBeCalled();
    expect(response.status).toBe(200);
  });
});
// route (excerpt from app.js)

import returnUserInfo from './returnUserInfo';

app.get(
  '/',
  returnUserInfo
);
// returnUserInfo.js

import db from '../database';

export default async function returnUserInfo(req, res, next) {
  const sql = 'select `userInfo` from `users` where `email` = ?';
  const bindings = ['test'];
  try {
    const data = await db.query(sql, bindings);
    if (data.length !== 1) {
      throw new Error(`Invalid ${Object.keys(data)}`);
    }
    return res.json(data[0]);
  } catch (err) {
    return next(err);
  }
}
// database.js

import { PoolConnection } from 'mysql';

const db = new PoolConnection(
  {
    host: 'localhost',
    user: 'root',
    password: 'foobar',
    database: 'db',
    connectionLimit: 100,
  },
  false,
);

export default db;

如前所述,使用 postman/insomnia 进行测试会返回正确的结果... 使用 supertest 进行测试并记录错误时:

Error: Invalid sql,bindings

【问题讨论】:

  • 在您检查 dbMock 上的预期调用时,您的 spyOn const 被命名为 mock。你确定这不是错字吗?
  • 感谢@happyhardik,这是转移到 SO 时的拼写错误。真正的问题是手动模拟数据库模块,它阻止了任何实际查询访问数据库。不过再次感谢!

标签: mysql node.js jestjs supertest


【解决方案1】:

似乎有一个 node_module 手动模拟 mysql 数据库,它覆盖了对数据库的所有调用并简单地返回

{ sql, bindings }

自我提醒:当事情没有意义时...检查它们是否应该有意义。

【讨论】:

  • 你可以选择你的答案已经解决了问题,这样问题就可以关闭了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-08
  • 2014-12-04
  • 1970-01-01
  • 2023-02-09
  • 2021-11-27
  • 2017-05-18
  • 1970-01-01
相关资源
最近更新 更多