2016-03-28 1 views
0

Я пишу модульные тесты для куска проекта, модуль базы данных является отдельным (он устанавливает соединение с базой данных и имеет метод массовой вставки). Код в моем тестовом файле блока выглядит следующим образом:Mocha js before hook и не требует правильного выполнения

var database = require('./db.js'); //once the database is connected there is a log saying connected to the database 
var Data = database.model; //module export for the model 

before(function(){ 

    console.log("We are in the before hook"); 
    for(var i = 1; i <= 10; i++){ 

     var startDate = new Date(2016,1,1,0,0,0,0); 
     var endDate = new Date(2016,1,1,1,0,0,0); 

     var data = test_data.genIncreasing('Watch_'+i , startDate.getTime(), endDate.getTime() , 2000, 9); //will get around 3600 points 
     console.log('Inserting ' + data.length + ' datapoints into database'); 
     database.bulkInsert(data, function(err, data){ 
      if(err){ 
      Should.fail('Could not insert data into data base'); 
      }else{ 
      console.log('Inserted Watch_' + i + ' data into database'); 
      } 
     }); 
    } 
}); 

Теперь в моей консоли я ожидал увидеть соединение по умолчанию

Mongoose открытый для DB-URI

с последующим

Мы находимся в предварительном крюке

Вставка 1800 точек данных в базе данных

Вставка 1800 точек данных в базу данных [10 раз]

Но я получаю

Мы в перед тем зацепить

Вставка 1800 точек данных в биллинговую

Вставка 1800 данных в базу данных [10 раз]

Далее следует подключения по умолчанию

Mongoose Открыты: DB_URI

Я сделал немного поиска и узнал, требует, предполагают, чтобы быть синхронными и поэтому тесты мокко блока. Что мне здесь не хватает? Можете ли вы дать мне представление о том, что происходит?

+0

Я предполагаю, что ваше раньше внутри 'описать'? –

+0

Нет, это снаружи, но я получаю те же результаты, когда я помещаю его в описание –

+0

Может быть, соединение в 'db.js' лениво? – Petr

ответ

1

Возможно, соединение в db.js является ленивым? - Petr Mar 28 at 21:56

К ленивому он означает, что если в вашем db.js файл у вас есть что-то вроде этого:

mongoose.connect('mongodb://localhost/stack'); 

Это не синхронно, просто в ожидании соединения. Вы можете получить соединение и слушать открытое событие:

var db = mongoose.connection; 
db.on('error', console.error.bind(console, 'connection error:')); 
db.once('open', function() { 
    // we're connected! 
}); 

До этого случая пожаров, соединение не будет не готов.

С другой стороны, мокко может обрабатывать как синхронный, так и асинхронный код. Но поскольку у вас есть обратный вызов, ваш код является асинхронным, поэтому вы должны добавить обратный вызов .

describe('User', function() { 
    describe('#save()', function() { 
    it('should save without error', function(done) { 
     var user = new User('Luna'); 
     user.save(function(err) { 
     if (err) throw err; 
     done(); 
     }); 
    }); 
    }); 
}); 

В этом случае выполненный обратный вызов находится в этом разделе, но он работает одинаково для всех крючков.

+0

Спасибо, что помогли! –