流星测试驱动开发

时间:2012-10-20 10:30:14

标签: tdd meteor

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

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

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

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

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

13 个答案:

答案 0 :(得分:83)

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

更新2 :截至2015年11月9日,Velocity is no longer maintained。 Xolv.io正致力于ChimpMeteor Development Group must choose an official testing framework

更新Velocity自{0.8}起为Meteor's official testing solution


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

好消息:您可以将Node.js testing tools与Meteor一起使用

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

请务必place your tests in the "tests" folder以便Meteor不会尝试执行您的测试。

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

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

# 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?

...在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'

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

答案 1 :(得分:45)

大家好结账laika - 流星的全新测试框架 http://arunoda.github.io/laika/

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

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

答案 2 :(得分:14)

我意识到这个问题已经得到了回答,但我认为这可以使用一些更多的背景,以提供上述背景的附加答案的形式。

我一直在使用meteor进行应用程序开发,以及通过实现meteor核心包以及atmosphere进行包开发。

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

  1. 如何运行整个流星测试套件?
  2. 如何为个人smart packages编写和运行测试?
  3. 如何为自己的应用程序编写和运行测试?
  4. 并且,听起来在某处可能存在奖励问题:  4.如何实现1,2和3的持续集成?

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

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

    我最近也回答了这个问题: How do you run the meteor tests?

    我认为@Blackcoat明确回答了3,以上。

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

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

答案 3 :(得分:12)

RTD现已被弃用,取而代之的是Velocity,它是Meteor 1.0的官方测试框架。随着Velocity的大力发展,文档仍然相对较新。您可以在Velocity Github repoVelocity HomepageThe Meteor Testing Manual(付费内容)上找到更多信息

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


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

示例项目here

使用Meteor here

解释单元测试的博客

使用Selenium WebdriverJS和Meteor进行e2e验收测试方法here

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

答案 4 :(得分:6)

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

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

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

仅供参考,我发现我还需要使用router Atmosphere package来制作'/ tests'路线来运行并显示测试结果,因为我不希望它每次都混乱我的应用程序它加载。

答案 5 :(得分:6)

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

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

  2. 一旦理解了这个想法,您就会想要tinytest的公共API文档。目前,唯一的文档位于tinytest包源的末尾:https://github.com/meteor/meteor/tree/devel/packages/tinytest

  3. 此外,截屏视频会谈到test-helpers,您可能需要查看此处的所有可用助手: https://github.com/meteor/meteor/tree/devel/packages/test-helpers 每个文件中通常都有一些文档

  4. 挖掘流星包的现有测试将提供很多例子。一种方法是在meteor源代码的包目录中搜索Tinytest.test.

答案 6 :(得分:5)

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

最低可行设计can be found here的原始讨论以及first implementation can be found here的详细信息。

MDG为测试which can be found here生成了指南文档的初始骨骼,并且some example tests here

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

  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();
    });
  });

答案 7 :(得分:4)

我正在浏览器中使用Meteor + Mocha进行功能/集成测试。我有以下几点(在coffeescript中为了更好的可读性):

在客户端......

Meteor.startup ->
    Meteor.call 'shouldTest', (err, shouldTest) ->
        if err? then throw err
        if shouldTest then runTests()

# Dynamically load and run mocha. I factored this out in a separate method so
# that I can (re-)run the tests from the console whenever I like.
# NB: This assumes that you have your mocha/chai scripts in .../public/mocha.
# You can point to a CDN, too.
runTests = ->
    $('head').append('<link href="/mocha/mocha.css" rel="stylesheet" />')
    $.getScript '/mocha/mocha.js', ->
      $.getScript '/mocha/chai.js', ->
        $('body').append('<div id="mocha"> </div>')
        chai.should() # ... or assert or explain ...
        mocha.setup 'bdd'
        loadSpecs() # This function contains your actual describe(), etc. calls.
        mocha.run()

...并在服务器上:

Meteor.methods 'shouldTest': -> true unless Meteor.settings.noTests  # ... or whatever.

当然,您可以以相同的方式进行客户端单元测试。对于集成测试,很高兴拥有所有Meteor基础设施。

答案 8 :(得分:3)

正如Blackcout所说,Velocity is the official TDD framework代表Meteor。但目前,速度的网页并没有提供良好的文档。所以我建议你观看:

答案 9 :(得分:2)

另一个从0.6.0开始可以轻松使用的选项是使用本地智能软件包运行整个应用程序,只需少量代码就可以启动应用程序(可能调用特定的智能软件包)你的应用程序的基础。)

然后,您可以利用Meteor的Tinytest,这对于测试Meteor应用非常有用。

答案 10 :(得分:0)

我已成功使用xolvio:cucumber和velocity来进行测试。工作得很好并且持续运行,因此您总能看到您的测试正在通过。

答案 11 :(得分:0)

Meteor + TheIntern

不知怎的,我设法用TheIntern.js测试Meteor应用程序。

虽然这符合我的需要。但我认为它可能会引导某人走向正确的方向,我正在分享我为解决这个问题所做的工作。

有一个execute函数允许我们运行JS代码,我们可以访问浏览器window对象,因此也可以访问Meteor

想要了解有关execute

的更多信息

这是test suite查找功能测试

的方式
define(function (require) {
    var registerSuite = require('intern!object');
    var assert = require('intern/chai!assert');
    registerSuite({
        name: 'index',

        'greeting form': function () {
            var rem = this.remote;
            return this.remote
                .get(require.toUrl('localhost:3000'))
                .setFindTimeout(5000)
                .execute(function() {
                        console.log("browser window object", window)
                        return Products.find({}).fetch().length
                    })
                .then(function (text) {
                    console.log(text)
                    assert.strictEqual(text, 2,
                        'Yes I can access Meteor and its Collections');
                });
        }
    });
});

要了解更多信息,这是我的gist

注意:我仍然处于这个解决方案的早期阶段。我不知道我是否可以做这个复杂的测试。但我对此非常有信心。

答案 12 :(得分:0)

速度尚未成熟。我正面临着使用速度的setTimeout问题。对于服务器端单元测试,您可以使用this package

速度比速度快。当我通过登录测试任何规格时,Velocity需要很长的时间。使用Jasmine代码,我们可以测试任何服务器端方法和发布。