在NodeJS中创建一个函数,它将一个查询结果作为回调函数返回?

时间:2017-07-19 19:51:25

标签: javascript mysql node.js mocha chai

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

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



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

  });
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

由于您的查询是异步的,因此您需要在回调函数中设置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();
  });
});