0

我正在开发一个自定义包。它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')in Package.onTest,测试会失败。

流星版本是 1.2.0.2。
测试跑步者是速度。
测试框架是 jasmine。
Mongo在测试中使用 ES6 语法和功能。

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

4

1 回答 1

1

使用带有api.use('other-package')in的包Package.onUse并不能'other-package'在您的测试代码中使用,就像它不能用于其他包use('my-package')或应用程序一样meteor add my-package。要解决此问题,有两种解决方案,具体取决于需要other-package

  1. 'other-package'允许包的用户(包括您的测试)访问api.imply

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

    当且仅当您需要使用您自己的包时,imply这才有意义。为了范围方便,不要随便做所有事情。在这个问题中查看更多信息。 如果它不属于该类别,imply

  2. 只需use测试中的包

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

    这也将允许您other-package在测试中使用,而不会污染范围。

于 2015-10-24T18:45:54.790 回答