2015-04-19 8 views
0

У меня есть несколько тестов tinytests, простых серверных модулей.Можете ли вы использовать tinytest для тестирования пакета, который использует другие пакеты

Отдельно они работают нормально, но если я запускаю их вместе, то получаю ошибки в своих коллекциях.

Что еще может вызвать ошибку, как показано ниже?

Я думаю, что это связано с определением экспорта в JS-файле и другими классами в coffeescript, а некоторые проблемы с определением области охвата усложняют ситуацию. «Говорил, что ты не пользуешься кофейником», я слышу. Но опять же, это может быть что-то еще!

os.osx.x86_64/dev_bundle/server-lib/node_modules/fibers/future.js:245 
W20150418-17:39:20.312(-7)? (STDERR)      throw(ex); 
          ^
Error: A method named '/Profiles/insert' is already defined 
    at packages/ddp/livedata_server.js:1461:1 
    at Function._.each._.forEach (packages/underscore/underscore.js:113:1) 
    at [object Object]._.extend.methods (packages/ddp/livedata_server.js:1459:1) 
    at [object Object].Mongo.Collection._defineMutationMethods (packages/mongo/collection.js:90 
    at new Mongo.Collection (packages/mongo/collection.js:209:1) 
    at [object Object].Meteor.Collection (packages/dburles:collection-helpers/collection-helper 
    at __coffeescriptShare (packages/local-test:dcsan:mpgames/lib/exports.js:2:1) 
    at /private/var/folders/lw/6kdr1_9j3q1ggldr_c798qy80000gn/T/meteor-test-run126tw73/.meteor/ 

FWIW У приложения нет проблем с запуском, его просто тесты, которые терпят неудачу.

ответ

0

Эта ошибка означает, что вы определили коллекцию Profiles более одного раза. Моя стратегия в решении этой проблемы в том, чтобы:

  1. Используйте глобальное определение с помощью api.export для любых коллекций, которые на самом деле должны быть определены с помощью пакета (например, если posts пакета определен Posts коллекцию).

  2. Определить все другие коллекции, необходимые испытания с именем null коллекция (неуправляемые) и использовать сброс вроде следующего перед каждым испытанием:

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); 
}; 

Так что, если вы звоните resetCollection('Posts') его будет определять только новую коллекцию, если это необходимо, и обеспечить ее удаление. Таким образом, вы избежите нескольких определений, и каждый раз вы начнете с чистой БД.

+0

Я бы предпочел решить, почему он думает, что профили определены дважды. Кажется, что это только в испытательном упряжи. На самом деле профили определяются в отдельном пакете, который используется только 'use'd. Но это обязательный параметр, поэтому я не могу создать фальшивую нулевую версию. Я четко определял его в 'export.js', что пространство имен пакетов метеор может иметь дело с радостью. – dcsan

+0

Grep для 'нового Mongo.Collection'? Я не уверен, как помочь, не видя ваш код. –

+0

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

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

  • Нет связанных вопросов^_^