2015-04-21 2 views
2

(Это похоже на этот вопрос:. How to set up separate test and development database in meteor, однако это 2-х лет и метеор сильно изменился с тех пор)Метеор - Выполнение тестов пакета с тестовой базой данных

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

У меня есть два вопроса:

  • Как я могу сказать Метеор бежать против тестовой базы данных вместо моей реальной?
  • Каков наилучший способ легко заполнить эту тестовую базу данных данными?

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

Я новичок в Tinytest (хотя я использовал другие модульные тестовые рамки), поэтому примеры кода очень ценятся.

ответ

3

Вот пример похож на то, что мы используем:

var resetCollection = function(name) { 
    var Collection = this[name]; 
    if (Collection) 
    // if the collection is already defined, remove its documents 
    Collection.remove({}); 
    else 
    // define a new unmanaged collection 
    this[name] = new Mongo.Collection(null); 
}; 

reset = function() { 
    var collections = ['Comments', 'Posts']; 

    // reset all of the collections 
    _.each(collections(function(name) {resetCollection(name);})); 

    // insert some documents 
    var postId = Posts.insert({title: 'example post'}); 
    Comments.insert({postId: postId, message: 'example comment'}); 
}; 

Tinytest.add('something', function(test) { 
    reset(); 

    var post = Posts.findOne(); 
    var comment = Comments.findOne(); 
    return test.equal(comment.postId, post._id); 
}); 

В начале каждого теста мы называем reset, который очищает базу данных и создает необходимые коллекции.

Как я могу сказать, что Meteor запускается вместо тестовой базы данных вместо моего реального?

При тестировании пакетов для вас будет создана отдельная база данных. Нет необходимости вручную указывать путь к db.

Каков наилучший способ легко заполнить эту тестовую базу данных данными?

В приведенном выше примере должны быть указаны некоторые указатели. Я нашел лучший способ избежать конфликтов между пакетами - использовать неуправляемые коллекции в тестах (name = null). Функция resetCollection должна правильно избегать переопределения любых управляемых коллекций, которые экспортируются другими пакетами. Также см. this question для более подробной информации.

+0

Это выглядит великолепно. Это также потрясающе относится к автоматической отдельной базе данных. Я ничего не видел в документации. Благодарю. – samanime

+0

Это не работает на стороне клиента. Я получаю сообщение о том, что я могу удалить только id. –

Смежные вопросы