Meteor 中的单元测试应该放在哪里?

Posted

技术标签:

【中文标题】Meteor 中的单元测试应该放在哪里?【英文标题】:Where should unit tests be placed in Meteor? 【发布时间】:2012-07-31 22:09:45 【问题描述】:

有没有一个地方可以让我的测试不被 Meteor 运行?

我刚刚开始了我的第一个 Meteor 项目,并开始使用 Mocha 和 should.js 编写单元测试。虽然 mocha 运行没有问题,但测试阻止 Meteor 启动,因为它使用节点的 require 而不是 __meteor_bootstrap__.require (full error message) 存在问题。

话虽如此,Meteor 不应该运行我的测试! 根据Meteor documentation,代码只能放在客户端、服务器或两者上。单元测试套件不属于这些类别,我 not the only person 对 Meteor 缺乏用于放置自动化测试的明确位置感到困惑。

现在,我的测试保存在server/test/,每个文件的内容都包含在块中:

if (typeof(Meteor) === 'undefined')  ... 

虽然这可行,但感觉并不优雅。对于使用 Meteor 应用程序构建测试,您还有其他建议吗?

更新: 代替 Meteor 文档中的明确说明,我遵循 Rails folder conventions(第 4 段),使用名为 test 的文件夹来存储我的测试资产。后来我把它移到了server/test,因为我不想把它加载到客户端上。

【问题讨论】:

这需要升级。我相信现在 Meteor Velocity 和 Jasmine 是不错的选择。 【参考方案1】:

将您的测试放在tests/ 文件夹中。与 Rails 使用一个名为 test 的文件夹来实现此目的不同,Meteor 使用复数 tests 作为该文件夹名称。

存储在名为“tests”的文件夹中的资产将被 Meteor 完全忽略;这些资产不会加载到客户端服务器上。

具有讽刺意味的是,有人告诉我有 opposite issue 的人希望 Meteor 客户端加载他们的测试。

【讨论】:

这个问题已经被记录在官方流星文档的"Structuring Your App"部分。【参考方案2】:

从 0.6.0 开始,一个有趣的方法是为您的应用专门使用本地智能包,可以使用 Meteor 的 tinytest 轻松测试。您将拥有位于智能包之外的最少代码来引导您的应用程序。

编辑:我已经完成了这种方法,我什至不需要驻留在智能包之外的最低限度的代码。整个应用都是包。

【讨论】:

【参考方案3】:

将您的测试文件放在tests 文件夹中,您应该没问题。如果您的应用程序有多个文件嵌套在serverclient 文件夹中,您可以在tests/clienttests/server 目录中复制类似的文件夹结构。不是规则,但我认为它有助于维护,并且我有过花费数小时调试丢失类错误的经验,该错误只需通过在测试文件夹中组织文件结构来解决。

【讨论】:

【参考方案4】:

由于这是 2012 年的问题,这里没有一个全面的答案,我想在这里尝试一个。

这是一个good starting point,用于开始考虑测试您的流星项目。

简而言之 Step1:流星添加三条:茉莉 Step2:meteor 添加velocity:html-reporter

当您执行此操作时,如果您的应用程序正在运行(或每当您重新启动应用程序时),在浏览器的右上角(您打开应用程序的位置),您将开始看到一个闪烁的点。而已。您现在已经有了测试框架。

现在您也可以借助此框架实际生成目录结构。当您点击那个闪烁的点时,您将看到如下所示的弹出窗口。

这有用于生成测试目录结构的便捷链接。

或者,您可以手动执行以下操作。 接下来是决定目录结构。 Meteor Documentation says enough about it. You need to have tests folder in your project root.

借鉴here,你可以这样。

<projectRoot>
|---jasmine
      |---client
             |--- integration
                      |---- my.first.integration.spec.js
      |---client
             |--- unit
                      |---- my.first.unit.spec.js
|---jasmine
      |---server
             |--- integration
                      |---- my.first.integration.spec.js
      |---server
             |--- unit
                      |---- my.first.unit.spec.js

还有 Viola,开始编写你的 jasmine 测试。这些帖子可以进一步帮助您。

Post1 Jasmine Documentation This is another good tutorial

【讨论】:

以上是关于Meteor 中的单元测试应该放在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

Python 单元测试在哪里? [关闭]

Meteor js,iron-router,在服务器端使用 Route.go('...') 进行单元测试不起作用

Vue 和 Jest 单元测试组件

Go单元测试命令

我将所有这些接口放在哪里?

Spring Boot Rest控制器单元测试