你可以使用tinytest来测试使用其他软件包的软件包吗?

时间:2015-04-19 00:41:55

标签: meteor tinytest

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

另外它们运行良好,但是如果我一起运行它们我的收藏品会出错。

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

我认为它与在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应用程序没有运行问题,只是测试失败。

1 个答案:

答案 0 :(得分:0)

此错误表示您多次定义Profiles集合。我处理这个问题的策略是:

  1. 通过api.export使用全局定义来实际应该由包定义的任何集合(例如,如果posts包定义了Posts集合)。

  2. 使用null集合名称(非托管)定义测试所需的所有其他集合,并在每次测试前使用类似以下的重置

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

    因此,如果您致电resetCollection('Posts'),它只会在需要时定义新的集合,并确保删除其文档。这样,您将避免多个定义,并且每次都会从干净的DB开始。