我有一些小测试,简单的服务器单元测试。
另外它们运行良好,但是如果我一起运行它们我的收藏品会出错。
还有什么可能导致如下所示的错误?
我认为它与在JS文件中定义导出以及coffeescript中的其他类和一些范围问题相关是复杂的。 "告诉你不要使用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 :(得分:0)
此错误表示您多次定义Profiles
集合。我处理这个问题的策略是:
通过api.export
使用全局定义来实际应该由包定义的任何集合(例如,如果posts
包定义了Posts
集合)。
使用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')
,它只会在需要时定义新的集合,并确保删除其文档。这样,您将避免多个定义,并且每次都会从干净的DB开始。