【问题标题】:Package.on_test runs even when not testingPackage.on_test 即使在不测试时也会运行
【发布时间】:2014-08-02 01:09:10
【问题描述】:

这是我们的应用启动时的样子:

=> Started proxy.
=> Started MongoDB.     
>>>>> IN ON_TEST
meteor-collection-management: updating npm dependencies -- mongodb...

啊。在meteor-collection-management/package.js(我们自己的包)中有这样的:

Package.on_test(function(api) {
    console.log(">>>>> IN ON_TEST");
    Npm.depends({
      mongodb: "1.4.1"
    });
    api.use(['meteor-collection-management', 'tinytest', 'test-helpers']);
    api.add_files('tests/dbobject-test.js', ['client', 'server']);
    api.add_files('tests/enums-test.js', ['client', 'server']);
});

为什么 Package.on_test 正在运行?即使在节点调试模式下,我也没有在测试模式下运行。

【问题讨论】:

    标签: node.js meteor


    【解决方案1】:

    on test 函数只是运行来构建一个依赖映射,即使它没有实际使用。我看到你也打开了一个问题。这里有更多关于它的作用的信息:https://github.com/meteor/meteor/blob/a40a6273953c0e18eddcd67919754814461c5dd4/tools/packages.js#L1434

    所以它构建了 .test,并且需要运行该方法来获取所需的文件。 Meteor 需要在项目运行之前知道它需要什么,这可能是两者都运行的原因。 (包需要内置到单个文件中,与 Meteor 的其余部分略有不同)

    【讨论】:

    • 我想你在这里建议一些东西?我觉得你几乎给了我一个答案。你已经告诉我发生了什么。但不是如何避免它。
    • 我回答了你的问题,Why is Package.on_test running。除了删除 Package.on_test 之外,没有其他方法可以避免它,因为执行此操作的流星部分是预构建的。
    • 但是如果应用程序没有在测试模式下运行,meteor 不应该关心 on_test 代码中指定的内容。即使正在测试应用程序,也不会测试包。包测试自己。这就是为什么你的回答对我没有任何意义。
    • @Pat 这个运行的步骤早在 Meteors 构建工具中。这在 Meteor 决定是在测试模式还是在正常模式下运行之前运行。在 Meteor 能够构建之前,它需要一个依赖映射来构建什么。测试模式和正常模式的依赖映射是同时构建的,无论它是否用于测试。这就是为什么不管它是否使用它总是运行的原因。有点像画地图,先画好再决定去哪里。
    • 它只能在测试模式下运行,它就是这样构建的。我什至引用了它执行此操作的行,如果您觉得这种行为是错误的,可以发送 PR。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多