当包有api.use(' mongo')时,为什么在包测试中使用Mongo会失败?

时间:2015-10-24 18:27:29

标签: javascript meteor meteor-velocity meteor-packages

我正在开发一个自定义包。它的package.js是:

Package.describe({
  name: 'adigiovanni:one-way-accounts',
  version: '0.0.1',
  summary: 'One Way Accounts',
  git: '',
  documentation: 'README.md',
});

Package.onUse(function (api) {
  api.versionsFrom('1.2.0.2');
  api.use('ecmascript');
  api.use('mongo');
  // api.imply('mongo');
  api.addFiles([
    'lib/collections/Accounts.js',
    'lib/methods.js',
    'lib/OneWayAccounts.js',
  ]);
  api.export('OneWayAccounts');
});

Package.onTest(function (api) {
  api.use([
    'ecmascript',
    'sanjo:jasmine@0.20.2',
    'velocity:html-reporter',
  ]);
  api.use('adigiovanni:one-way-accounts');
  api.addFiles('tests/client/OneWayAccounts.js', 'client');
  api.addFiles('tests/server/OneWayAccounts.js', 'server');
});

如您所见,包使用'mongo'

测试失败:

  

参考错误:没有定义Mongo

但如果我取消注释行api.imply('mongo'),那么测试就会成功。

相同的奇怪行为适用于ecmascript依赖关系,如果我api.use('ecmascript') Package.onTest Mongo,则测试失败。

Meteor版本是1.2.0.2 试验跑步者是速度 测试框架是茉莉 我在测试中使用map和ES6语法和功能。

发生了什么,我该如何解决?

1 个答案:

答案 0 :(得分:1)

Package.onUse中使用api.use('other-package')的程序包不会使您的测试代码中的'other-package'可用,因为它不会使use('my-package')的其他程序包可用}或在meteor add my-package的应用程序中。要解决此问题,根据other-package

的需要,有两种解决方案
  1. 允许该软件包的用户(包括您的测试)使用api.imply访问'other-package'

    Package.onUse(function (api) {
      //...
      api.imply('other-package')
      //...
    })
    

    这是有道理的,当且仅当您imply 需要使用自己的软件包时。为方便起见,请不要imply一切都是不可能的。查看更多in this question 如果不属于该类别,

  2. 只需use测试中的包

    Package.onTest(function (api) {
      //...
      api.use('my-package')
      api.use('other-package')
      //...
    })
    

    这样您就可以在测试中使用other-package,而不会污染范围。