为啥我必须在 Meteor 的 Package.onTest 中复制我在 Package.onUse 中指定的包?

Posted

技术标签:

【中文标题】为啥我必须在 Meteor 的 Package.onTest 中复制我在 Package.onUse 中指定的包?【英文标题】:Why do I have to duplicate packages that I specified in Package.onUse in Package.onTest in Meteor?为什么我必须在 Meteor 的 Package.onTest 中复制我在 Package.onUse 中指定的包? 【发布时间】:2016-10-01 21:50:33 【问题描述】:

在以下命令中,我收到以下错误

$ meteor test-packages --driver-package practicalmeteor:mocha rocketchat:spotify

控制台输出

=> Errors prevented startup:

   While building package local-test:rocketchat:spotify:
   error: No plugin known to handle file 'spotify.test.coffee'. If you want this file to be a static asset, use
   addAssets instead of addFiles; eg, api.addAssets('spotify.test.coffee', 'client').

我很困惑,因为我在 Package.onUse 下指定了 coffeescript 包。

rocketchat-spotify/package.js

Package.describe(
    name: 'rocketchat:spotify',
    version: '0.0.1',
    summary: 'Message pre-processor that will translate spotify on messages',
    git: ''
);

Package.onUse(function(api) 
    api.versionsFrom('1.0');

    api.use([
        'coffeescript', # Coffeescript is included here?
        'templating',
        'underscore',
        'rocketchat:oembed@0.0.1',
        'rocketchat:lib'
    ]);

    api.addFiles('lib/client/widget.coffee', 'client');
    api.addFiles('lib/client/oembedSpotifyWidget.html', 'client');

    api.addFiles('lib/spotify.coffee', ['server', 'client']);
);

Package.onTest(function (api) 
    api.use([
        'rocketchat:spotify'
    ]);
    api.addFiles('spotify.test.coffee');
);

如下添加coffeescript包可以解决问题

Package.onTest(function (api) 
    api.use([
        'coffeescript',
        'rocketchat:spotify'
    ]);
    api.addFiles('spotify.test.coffee');
);

=> Modified -- restarting.
=> Meteor server restarted
=> Started your app.

控制台输出

=> App running at: http://localhost:3000/
I20160602-17:55:02.867(9)? Updating process.env.MAIL_URL
I20160602-17:55:04.528(9)? MochaRunner.runServerTests: Starting server side tests with run id aXdi2H3kBS8M8Fuhx
W20160602-17:55:04.577(9)? (STDERR) MochaRunner.runServerTests: failures: 10

版本信息

$ meteor --version
Meteor 1.2.1

【问题讨论】:

【参考方案1】:

根据Package.onTestdocumentation,您需要单独指定测试的依赖关系。因此,如果您的单元测试使用 CoffeeScript,那么您需要在 onTest 回调中明确指定它。

您可以将包的单元测试视为构建在您正在测试的包之上的单独包。

为什么?

MDG 做到了,因为有时你的测试与你正在测试的包有不同的依赖关系。例如:您使用 CoffeeScript 编写包,但您的测试是使用纯 javascript 编写的。那么 CoffeeScript 依赖对于测试来说是多余的。当前版本的 API 允许您单独指定这些依赖项。

【讨论】:

以上是关于为啥我必须在 Meteor 的 Package.onTest 中复制我在 Package.onUse 中指定的包?的主要内容,如果未能解决你的问题,请参考以下文章

为啥没有定义 Meteor 模板对象?

为啥 Meteor 模板助手不在上下文中返回变量?

为啥 Meteor 抱怨集合的插入方法已经定义?

为啥我的带有帐户包的 Meteor 应用程序没有发送验证电子邮件?

为啥 Meteor.user 和 Meteor.userId 不同?

为啥当我将 Meteor 应用程序转换为使用 Docker 时,我的 MongoDB 数据会消失?