在 NodeJS 中创建一个 returns 查询结果作为回调的函数?

Creating a function in NodeJS that returns a query result as a call back?

我正在尝试在 NodeJS 中使用 mocha/chai 验证数据库操作是否正确。我正在尝试创建一种方法来 运行 一个 sql 查询,然后验证它是否正确执行。现在我正在按顺序执行所有 mysql 但是当我得到断言时结果还没有生成,所以我想知道这个问题的最佳解决方案?

这是我目前设置它的方式,但是当 expect() 语句 运行s 数组中还没有数据时。

const assert = require('chai').assert;
const expect = require('chai').expect;
const mysql = require('mysql');

describe('Test mysql credentials, connection and CRUD  operation', function() {
  var host = "localhost";
  var user = "user";
  var pass = "pass";

  describe('Test CREATE DATABASE', function() {
    var connection = mysql.createConnection({
      host: host,
      user: user,
      password: pass
    });
    before(function(done) {
      connection.query("CREATE DATABASE test_db;", function(err, result) {
        if (err) throw err;
      });
      done();
    });

    it('Database Sucessfully Created', function() {
      var databases = new Array();
      connection.query("SHOW DATABASES;", function(err, result) {
        if (err) throw err;
        for (i = 0; i < result.length; i++) {
          databases.push(result[i].Database);
        }
      });
      expect(databases).to.include('test_db');
    });

  });

由于您的查询是异步的,您需要在回调函数中设置expect。一旦执行断言,您还必须调用 done 函数。

it('Database Sucessfully Created', function(done) {
  var databases = new Array();
  connection.query("SHOW DATABASES;", function(err, result) {
    if (err) throw err;
    for (i = 0; i < result.length; i++) {
      databases.push(result[i].Database);
    }

    expect(databases).to.include('test_db');
    done();
  });
});