2017-07-19 76 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

相關問題