流星测试驱动开发

我不知道如何在陨石上进行测试驱动开发。

我没有看到任何文档或 FAQ 中提到它。我没有看到任何例子或类似的东西。

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

我需要开发人员的回应,关于这方面的路线图是什么。大致如下:

  • 有可能,没有文件,你自己想办法
  • 陨石不是用来制造可测试应用程序的
  • this is planned feature
  • 等等
14663 次浏览

更新3 : 在“流星1.3”中,“流星”包含一个 testing guide,其中包含单元、集成、验收和负载测试的分步指令。

更新2 : 截至2015年11月9日,速度不再保持. Xolv.io 正在集中精力于 黑猩猩流星发展集团必须选择一个正式的测试框架

更新 : 速度在0.8.1时为 Meteor's official testing solution


Not much has been written about automated testing with Meteor at this time. I expect the Meteor community to evolve testing best-practices before establishing anything in the official documentation. After all, Meteor reached 0.5 this week, and things are still changing rapidly.

好消息是: 你可以使用流星测试工具 来测试 Node.js

对于我的 Meetor 项目,我使用 阿漆对断言运行 摩卡单元测试。如果您不需要 Chai 的全部功能集,我建议您使用 应该 JS。目前我只有单元测试,不过您也可以用 Mocha 编写集成测试。

Be sure to 将您的测试放在“测试”文件夹中 so that Meteor does not attempt to execute your tests.

Mocha supports 咖啡脚本, my choice of scripting language for Meteor projects. Here's a 样本蛋糕档案 with tasks for running your Mocha tests. If you are using JS with Meteor, feel free to adapt the commands for a Makefile.

为了让自己暴露在 Mocha 面前,需要稍微修改一下陨石模型,这需要对 Node.js 的工作原理有一些了解。可以将每个 Node.js 文件看作是在它自己的作用域内执行的。流星会自动将不同文件中的对象相互暴露,但普通的 Node 应用程序(如 Mocha)不会这样做。为了让我们的模型可以通过摩卡测试,出口每个流星模型与以下 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?

... 在你的摩卡测试的顶端,导入你想要测试的模型:

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

这样,您就可以开始编写并运行您的陨石项目的单元测试了!

我意识到这个问题已经得到了回答,但我认为这可能需要更多的上下文,以提供上下文的附加回答的形式。

我一直在做一些应用程序开发与流星,以及软件包开发,都实现了一个流星核心,以及 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. 如何为单个 智能软件包编写和运行测试?
  3. 如何为自己的应用程序编写和运行测试?

而且,听起来好像还有一个额外的问题: 4. 如何实现1、2和3的连续集成?

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

我已经向陨石核心提交了一个初始请求,地址是1和2: https://github.com/meteor/meteor/pull/573

I had also recently answered this question: 你是怎么做流星测试的?

我认为@Blackcott 已经明确地回答了上面的3个问题。

至于奖金,4,我建议至少使用 Circleci.com为您自己的应用程序做持续集成。它们目前支持@Blackcott 所描述的用例。我有一个项目,我已经成功地得到了用咖啡脚本编写的测试,用摩卡来运行单元测试,就像@Blackcott 所描述的那样。

为了持续集成陨石核心和智能软件包,Naomi Seyfer 和我正在和 circleci 的创始人聊天,看看我们能否在近期内实现一些令人敬畏的东西。

我在浏览器里用流星 + 摩卡做 functional/integration测试。我有些东西大致如下(在咖啡脚本中,为了更好的可读性) :

在客户身上..。

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.

当然,您可以用同样的方法进行客户端 unit测试。不过,对于集成测试来说,拥有所有的流星基础设施是件好事。

RTD 现在已经被 Velocity 所取代,后者是流星1.0的官方测试框架。由于 Velocity 正在大力开发之中,文档编制仍然相对较新。你可以找到一些关于 Velocity Github repoVelocity 首页流星测试手册(付费内容)的更多信息

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


Check out RTD, a full testing framework for Meteor here rtd.xolv.io. 它支持 Jasmine/Mocha/自定义,同时支持普通 JS 和咖啡,还包括结合单元/服务器/客户机覆盖的测试覆盖。

And an example project here

一个博客,解释单元测试与流星 给你

使用 SeleniumWebdriverJS 和 Meetor给你的 e2e 验收测试方法

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

我经常使用这个页面,并尝试了所有的答案,但从我的初学者的起点,我发现他们相当混乱。一旦我遇到麻烦,我就不知道如何解决了。

这个解决方案很容易开始,如果还没有完整的文档的话,所以我建议像我这样的人来做 TDD,但是不确定 JavaScript 测试是如何工作的,哪些库插入了什么:

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

FYI, I found that I also need to use the router Atmosphere package to make a '/tests' route to run and display the results from the tests, as I didn't want it to clutter my app every time it loads.

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

然后您可以利用流星的 Tinytest,这是伟大的测试流星应用程序。

嗨,所有检查 莱卡-全新的流星测试框架 Http://arunoda.github.io/laika/

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

Disclaimer: I'm the author of Laika.

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

  1. 这段视频解释了基本原理: Https://www.eventedmind.com/feed/meteor-testing-packages-with-tinytest

  2. Once you understood the idea, you'll want the public API documentation for tinytest. For now, the only documentation for that is at the end of the source of the tinytest package: https://github.com/meteor/meteor/tree/devel/packages/tinytest

  3. 此外,视频中谈到了 test-helpers,你可能想看看这里所有可用的助手: Https://github.com/meteor/meteor/tree/devel/packages/test-helpers 每个文件

  4. 中通常都有一些文档
  5. 挖掘现有的流星包装测试将提供大量的例子。一种方法是在流星源代码的包目录中搜索 Tinytest.test.

我已经成功地使用 xolvio: 黄瓜和速度做我的测试。工作得非常好,并且可以连续运行,因此您总是可以看到您的测试通过了。

正如 Blackcout 所说,流星的速度 is the official TDD framework。但是现在 velocity 的网页并没有提供很好的文档。所以我建议你看看:

流星 + 实习生

我设法用 TheIntern.js 测试了流星应用程序。

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

有一个 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');
});
}
});
});

为了了解更多,这是我的 大意

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

速度还不成熟。我在使用 velocity 时遇到了 setTimeout 问题。对于服务器端单元测试,可以使用 这个包裹

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

在即将发布的1.3版本中,测试成为了流星的核心部分。最初的解决方案是基于摩卡和印度茶。

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

MDG have produced the initial bones of the guide documentation for the testing 可以在这里找到, and there are 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();
});
});