我不知道如何在流星中进行测试驱动开发。
我在文档或常见问题解答中没有提到它。我没有看到任何例子或类似的东西。
我看到有些软件包正在使用Tinytest。
我需要开发人员的回复,这是什么路线图。有点像:
答案 0 :(得分:83)
更新3 :从Meteor 1.3开始,meteor包含一个testing guide,其中包含有关单元,集成,验收和负载测试的分步说明。
更新2 :截至2015年11月9日,Velocity is no longer maintained。 Xolv.io正致力于Chimp和Meteor 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进行包开发。
听起来你的问题可能实际上是一个问题分三个部分:
并且,听起来在某处可能存在奖励问题: 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 repo,Velocity Homepage和The 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的用法,你可能想看看那些有用的资源:
此截屏视频介绍了基本知识: https://www.eventedmind.com/feed/meteor-testing-packages-with-tinytest
一旦理解了这个想法,您就会想要tinytest
的公共API文档。目前,唯一的文档位于tinytest
包源的末尾:https://github.com/meteor/meteor/tree/devel/packages/tinytest
此外,截屏视频会谈到test-helpers
,您可能需要查看此处的所有可用助手:
https://github.com/meteor/meteor/tree/devel/packages/test-helpers
每个文件中通常都有一些文档
挖掘流星包的现有测试将提供很多例子。一种方法是在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代码,我们可以测试任何服务器端方法和发布。