2017-07-19 73 views
1

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

这是我现在设置的方式,但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'); 
 
    }); 
 

 
    });

回答

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(); 
    }); 
}); 
+0

https://mochajs.org/#asynchronous-code。如果您愿意,您也可以返回Promise。 – pethel

+0

谢谢。这似乎解决了这个问题。那么查询函数中的函数(err,result)基本上是内置的回调函数吗? – adaelemans

+0

你是什么意思的内置回调? – Erazihel

相关问题