流星测试驱动开发

Rub*_*cut 120 tdd meteor

我不知道如何在流星中进行测试驱动开发.

我在文档或常见问题解答中没有提到它.我没有看到任何例子或类似的东西.

我看到有些软件包正在使用Tinytest.

我需要开发人员的回应,这是什么路线图.有点像:

  • 可能,没有文档,自己搞清楚
  • 流星不是以可以制作可测试应用程序的方式构建的
  • 这是计划中的功能
  • 等等

Bla*_*oat 83

更新3:从Meteor 1.3开始,meteor包含一个测试指南,其中包含有关单元,集成,验收和负载测试的逐步说明.

更新2:截至2015年11月9日,不再维护Velocity.Xolv.io正致力于Chimp,流星开发组必须选择官方测试框架.

更新:VelocityMeteor的官方测试解决方案,截至0.8.1.


目前关于使用Meteor进行自动化测试的文章并不多.我希望Meteor社区能够在官方文档中建立任何内容之前发展测试最佳实践.毕竟,流星本周达到了0.5,事情仍在迅速变化.

好消息:你可以在Meteor上使用Node.js测试工具.

对于我的流星的项目,我跑我的单元测试与摩卡使用的断言.如果您不需要Chai的完整功能集,我建议使用should.js.我目前只进行单元测试,但你也可以用Mocha编写集成测试.

请务必将测试放在"tests"文件夹中,以便Meteor不会尝试执行测试.

Mocha支持CoffeeScript,我选择Meteor项目的脚本语言.这是一个示例Cakefile,其中包含运行Mocha测试的任务.如果您在Meteor中使用JS,请随意调整Makefile的命令.

您的Meteor模型需要稍微修改才能将自己暴露给Mocha,这需要了解Node.js的工作原理.将每个Node.js文件视为在其自己的范围内执行.Meteor自动将不同文件中的对象相互暴露,但普通的Node应用程序(如Mocha)不会这样做.要使我们的模型可以通过Mocha测试,请使用以下CoffeeScript模型导出每个Meteor模型:

# Export our class to Node.js when running
# other modules, e.g. our Mocha tests
#
# Place this at the bottom of our Model.coffee
# file after our Model class has been defined.
exports.Model = Model unless Meteor?
Run Code Online (Sandbox Code Playgroud)

...在Mocha测试的顶部,导入您要测试的模型:

# Need to use Coffeescript's destructuring to reference
# the object bound in the returned scope
# http://coffeescript.org/#destructuring
{Model} = require '../path/to/model'
Run Code Online (Sandbox Code Playgroud)

有了它,您可以开始使用Meteor项目编写和运行单元测试!

  • 当我的测试代码使用任何"Meteor.whatever"函数时,我已经尝试过并遇到问题.我得到Meteor是未定义的错误.有没有办法要求Meteor明确地解决这个问题? (2认同)
  • Christian,我在回答中描述的方法目前还不完整,因为它没有运行Meteor应用程序的完整实例.因此,"Meteor"对象无法访问,Meteor公开的任何模型依赖性也是如此.改进此过程将涉及在Mocha中实例化应用程序的环境,并将"Meteor"对象暴露给您的测试.一旦我有一个更完整的测试解决方案,我一定会更新这个答案.在此期间,如有任何问题或建议改进,请随时与我联系. (2认同)

Aru*_*ala 44

嗨所有结账laika - 流星的全新测试框架 http://arunoda.github.io/laika/

您可以一次测试服务器和客户端.

免责声明:我是Laika的作者.

  • 那是这样做的吗? (5认同)

zea*_*ker 14

我意识到这个问题已经得到了解答,但我认为这可以使用一些更多的上下文,以提供所述上下文的附加答案的形式.

我一直在使用meteor进行应用程序开发,以及通过实现流星核心包以及大气层的包开发.

听起来你的问题可能实际上是一个问题,分为三个部分:

  1. 如何运行整个流星测试套件?
  2. 如何为单个智能包编写和运行测试?
  3. 如何为自己的应用程序编写和运行测试?

并且,听起来在某处可能存在一个奖励问题:4.如何实现1,2和3的持续集成?

我一直在谈论并开始与流星核心团队的Naomi Seyfer(@sixolet)合作,以帮助在文档中获得所有这些问题的明确答案.

我向流星核心提交了一个初始拉取请求,解决了1和2:https://github.com/meteor/meteor/pull/573.

我最近也回答了这个问题: 你如何进行流星测试?

我认为@Blackcoat明确地回答了上述3.

至于奖金,4,我建议至少使用circleci.com为你自己的应用程序进行持续集成.他们目前支持@Blackcoat描述的用例.我有一个项目,我已经成功地用coffeescript编写了用mocha运行单元测试的测试,就像@Blackcoat所描述的那样.

为了继续整合流星核心和智能套装,Naomi Seyfer和我正在与circleci的创始人聊天,看看我们能否在短期内实现一些非常棒的功能.


Xol*_*.io 12

RTD现已被弃用,并被Velocity取代,Velocity是Meteor 1.0的官方测试框架.随着Velocity的大力发展,文档仍然相对较新.您可以在Velocity Github repo,Velocity主页The Meteor测试手册(付费内容)上找到更多信息.

免责声明:我是Velocity的核心团队成员之一,也是本书的作者.


查看RTD,这是Meteor的完整测试框架,rtd.xolv.io.它支持Jasmine/Mocha/custom,适用于普通JS和咖啡.它还包括测试覆盖,它结合了单元/服务器/客户端覆盖.

和示例项目在这里

一个博客来解释单元测试与流星这里

这里使用Selenium WebdriverJS和Meteor的e2e验收测试方法

希望有所帮助.免责声明:我是RTD的作者.


pip*_*omb 6

我经常使用这个页面并尝试了所有的答案,但从初学者的起点开始,我发现它们很混乱.一旦遇到任何麻烦,我对如何修复它们感到困惑.

这个解决方案开始时非常简单,如果还没有完整记录,那么我推荐给像我这样想要做TDD但不确定如何在JavaScript中进行测试以及哪些库插入到什么内容的人:

https://github.com/mad-eye/meteor-mocha-web

仅供参考,我发现我还需要使用路由器Atmosphere软件包来制作'/ tests'路线来运行并显示测试结果,因为我不想让它在每次加载时都混乱我的应用程序.


Wil*_*oux 6

关于tinytest的用法,你可能想看看那些有用的资源:

  1. 这个截屏视频介绍了基础知识:https: //www.eventedmind.com/feed/meteor-testing-packages-with-tinytest

  2. 一旦理解了这个想法,你就会想要公开的API文档tinytest.目前,唯一的文档是在tinytest软件包源代码的末尾:https://github.com/meteor/meteor/tree/devel/packages/tinytest

  3. 另外,在截屏视频中test-helpers,你可能想看看这里所有可用的帮助器:https: //github.com/meteor/meteor/tree/devel/packages/test-helpers 每个内部通常都有一些文档.文件

  4. 挖掘流星包的现有测试将提供很多例子.这样做的一个方法是使搜索Tinytest.test.在流星的源代码包目录


tom*_*dox 5

在即将发布的1.3版本中,测试成为Meteor的核心部分。最初的解决方案基于Mocha和Chai。

最小可行设计的原始讨论可以在这里找到,而第一个实现的细节可以在这里找到

MDG为测试提供了指导文档的原始内容,可以在这里找到,这里一些示例测试

这是上面链接中的发布测试示例:

  it('sends all todos for a public list when logged in', (done) => {
    const collector = new PublicationCollector({userId});
    collector.collect('Todos.inList', publicList._id, (collections) => {
      chai.assert.equal(collections.Todos.length, 3);
      done();
    });
  });
Run Code Online (Sandbox Code Playgroud)