0

我有一些小测试,简单的服务器单元测试。

它们分别运行良好,但如果我一起运行它们,我的收藏就会出错。

还有什么可能导致如下错误?

我认为它与定义 JS 文件中的导出和咖啡脚本中的其他类有关,并且一些范围问题使事情复杂化。“告诉你不要使用咖啡脚本”我听到了。但话又说回来,它可能是别的东西!

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 该应用程序运行没有问题,只是测试失败。

4

1 回答 1

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')它,它将仅在需要时定义一个新集合并确保其文档已被删除。这样,您将避免多个定义,并且每次都从一个干净的数据库开始。

于 2015-04-19T04:56:43.507 回答