120

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

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

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

我需要开发人员的回应,关于此的路线图是什么。类似于以下内容:

  • 可能的,没有文档,自己想办法
  • 流星不是以您可以制作可测试应用程序的方式构建的
  • 这是计划中的功能
  • ETC
4

13 回答 13

83

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

更新 2:截至 2015 年 11 月 9 日,Velocity 不再维护。Xolv.io 正在将精力集中在Chimp上,而Meteor Development Group 必须选择一个官方的测试框架

更新VelocityMeteor 从 0.8.1 开始的官方测试解决方案


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

好消息:您可以将Node.js 测试工具与 Meteor 一起使用。

对于我的 Meteor 项目,我使用Mocha运行我的单元测试,使用Chai进行断言。如果您不需要 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?

...在你的 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 项目编写和运行单元测试了!

于 2012-10-21T16:05:16.687 回答
44

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

您可以同时测试服务器和客户端。

免责声明:我是莱卡的作者。

于 2013-05-26T13:56:25.393 回答
14

I realize that this question is already answered, but I think this could use some more context, in the form of an additional answer providing said context.

I've been doing some app development with meteor, as well as package development, both by implementing a package for meteor core, as well as for atmosphere.

It sounds like your question might be actually a question in three parts:

  1. How does one run the entire meteor test suite?
  2. How does one write and run tests for individual smart packages?
  3. How does one write and run tests for his own application?

And, it also sounds like there may be a bonus question in there somewhere: 4. How can one implement continuous integration for 1, 2, and 3?

I have been talking and begun collaborating with Naomi Seyfer (@sixolet) on the meteor core team to help get definitive answers to all of these questions into the documentation.

I had submitted an initial pull request addressing 1 and 2 to meteor core: https://github.com/meteor/meteor/pull/573.

I had also recently answered this question: How do you run the meteor tests?

I think that @Blackcoat has definitively answered 3, above.

As for the bonus, 4, I would suggest using circleci.com at least to do continuous integration for your own apps. They currently support the use case that @Blackcoat had described. I have a project in which I've successfully gotten tests written in coffeescript to run unit tests with mocha, pretty much as @Blackcoat had described.

For continuous integration on meteor core, and smart packages, Naomi Seyfer and I are chatting with the founder of circleci to see if we can get something awesome implemented in the near term.

于 2012-12-27T05:22:28.587 回答
12

RTD 现在已被弃用并被 Velocity 取代,这是 Meteor 1.0 的官方测试框架。由于 Velocity 正在大力开发,文档仍然相对较新。您可以在Velocity Github 存储库Velocity 主页The Meteor 测试手册(付费内容)上找到更多信息

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


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

还有一个示例项目here

在这里解释使用 Meteor 进行单元测试的博客

在此处使用 Selenium WebdriverJS 和 Meteor 的 e2e 验收测试方法

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

于 2013-03-18T07:31:32.113 回答
6

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

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

  2. 一旦你理解了这个想法,你就会想要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. 挖掘流星包的现有测试将提供很多示例。一种方法是在meteor的源代码的包目录中搜索Tinytest.test.

于 2013-12-14T12:48:08.267 回答
6

我经常使用此页面并尝试了所有答案,但从初学者的角度来看,我发现它们很混乱。一旦我遇到任何麻烦,我就对如何解决它们感到困惑。

这个解决方案很容易上手,如果还没有完整的文档,所以我推荐给像我这样想要做 TDD 但不确定 JavaScript 测试如何工作以及哪些库插入什么的人:

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

仅供参考,我发现我还需要使用路由器 Atmosphere 包来创建一个“/tests”路由来运行并显示测试结果,因为我不希望它每次加载时都会弄乱我的应用程序。

于 2013-03-28T16:03:00.630 回答
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();
    });
  });
于 2016-02-02T15:00:14.620 回答
4

我正在浏览器中使用 Meteor + Mocha进行功能/集成测试。我有以下内容(在咖啡脚本中以提高可读性):

在客户端...

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 基础设施是很好的。

于 2013-01-27T03:52:29.480 回答
3

正如 Blackcout 所说,Velocity是 Meteor 的官方 TDD 框架。但是目前velocity的网页没有提供好的文档。所以我推荐你看:

于 2015-11-14T10:11:55.807 回答
2

另一个选项,从 0.6.0 开始很容易使用,是在本地智能包之外运行整个应用程序,在包之外使用最少的代码来启动应用程序(可能调用一个特定的智能包,它是你的基础应用程序)。

然后,您可以利用 Meteor 的 Tinytest,它非常适合测试 Meteor 应用程序。

于 2013-05-25T00:51:38.520 回答
0

流星+实习生

不知何故,我设法用 TheIntern.js 测试了 Meteor 应用程序。

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

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

想了解更多关于执行

这就是我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');
                });
        }
    });
});

要了解更多,这是我的要点

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

于 2015-11-23T09:58:16.820 回答
0

我已经成功地使用 xolvio:cucumber 和 velocity 来做我的测试。工作得非常好并且连续运行,所以你总是可以看到你的测试正在通过。

于 2015-08-14T05:56:46.517 回答
0

速度还不成熟。我面临使用速度的 setTimeout 问题。对于服务器端单元测试,您可以使用这个包

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

于 2015-12-10T21:03:14.573 回答