2016-12-08 6 views
0

ここではテストしたい機能があります。それはmysqlからデータベースを取得しますMochaによるテスト時にアサートして動作しないでください

var mysql  = require('mysql'); 
var pool = mysql.createPool({ 
    host  : 'localhost', 
    user  : 'root', 
    password : 'toor', 
    database : 'DB' 
}); 
exports.findById = function(id, callback){ 
    pool.getConnection(function(err, connection) { 
    var row; 
    var query = connection.query("SELECT * FROM Users WHERE id = '" + id + "'", function(err, rows) { 
     connection.release(); 
     callback(null,rows[0]); 
    }); 
    console.log(query.sql); 
    }); 
} 

私はこの機能の手動テストを行います。行の値が[0]この

var user = { 
     id: 1, 
     username: 'test', 
     password: '123', 
     name: 'test user', 
     phone: '01699924568' 
     } 

ようにする必要がありますので、これは私がそれ

var User = require('../Lib/users.js'); 
var assert = require('assert'); 
var should = require('should'); 
describe('Test User Class', function() { 
    describe('Test case 1: Load user with id from database', function() { 
    it('should return user with id = 1 in database', function() { 
     User.findById(1, function(error, rows){ 
     rows.id.should.be.equal(2) 
     }); 
    }); 
    }); 
}); 

のために書いたテストが返されたidが1(ない2)であるため、このテストはエラーが発生しなければならないです。しかし、期待通りには起こらず、テストに合格しました。 私は本当にこのエラーで怒っています。私は、このような聞かせてexports.findById関数の戻り列として多くの方法を試してみました[0]が、行が[0]の値(コンソールにログインすることにより、I試験) が私を助けているが、それは未定義返さください

答えて

0

あなたが何らかの方法でmochaを指示する必要がありますテストが非同期であること。

findById関数は、アクションを実行するスレッドの実行をブロックしませんが、コールバックを取得しています。つまり、非同期関数です。 、あなたの場合は1

を持っている場合

  • doneコールバック
  • リターンの約束を使用できます:mocha

    は、次の2つのオプションがありますが、非同期テストを持っていることを通知しますプロミスを持っていないので、フォーマルな方法を使わなければなりません。

    var User = require('../Lib/users.js'); 
    var assert = require('assert'); 
    var should = require('should'); 
    describe('Test User Class', function() { 
        describe('Test case 1: Load user with id from database', function() { 
        it('should return user with id = 1 in database', function(done) { 
         User.findById(1, function(error, rows){ 
         rows.id.should.be.equal(2); 
         // now tell mocha you're done with the test 
         done(); 
         }); 
        }); 
        }); 
    }); 
    
+0

ありがとうございます。役に立った – Bella

+0

あなたはそれを解決しましたか? – MarcoL

+0

はい。問題は解決されました。私は最終的にテストを書くことができました – Bella

関連する問題