我看不到如何在流星中进行测试驱动的开发。
我没有在文档或常见问题解答中看到它。我没有看到任何例子或类似的东西。
我看到有些软件包正在使用Tinytest。
我需要开发人员的回应,这是什么路线图。类似于以下内容:
- 可能,没有文档,请自己弄清楚
- 流星的构建方式并非可以使应用程序可测试
- 这是计划的功能
- 等等
我看不到如何在流星中进行测试驱动的开发。
我没有在文档或常见问题解答中看到它。我没有看到任何例子或类似的东西。
我看到有些软件包正在使用Tinytest。
我需要开发人员的回应,这是什么路线图。类似于以下内容:
Answers:
更新3:从Meteor 1.3开始,meteor包括一个测试指南,其中包含有关单元,集成,验收和负载测试的分步说明。
更新2:从2015年11月9日起,不再维持Velocity。Xolv.io将他们的工作重点放在了Chimp上,Meteor Development Group必须选择一个官方的测试框架。
更新:从0.8.1开始,Velocity是Meteor的官方测试解决方案。
目前,有关使用Meteor进行自动化测试的文章还很少。我希望Meteor社区在正式文档中建立任何内容之前,先发展测试最佳实践。毕竟,流星本周达到了0.5,并且情况仍在迅速变化。
好消息:您可以在Meteor中使用Node.js测试工具。
对于我的Meteor项目,我使用Chai声明与Mocha一起运行单元测试。如果您不需要Chai的完整功能集,建议您改用should.js。尽管您也可以使用Mocha编写集成测试,但目前我只有单元测试。
确保将测试放置在“ tests”文件夹中,以免Meteor尝试执行测试。
Mocha支持CoffeeScript,这是我为Meteor项目选择的脚本语言。这是一个示例Cakefile,其中包含用于运行Mocha测试的任务。如果您将JS与Meteor一起使用,请随时为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项目编写和运行单元测试了!
Meteor.whatever
函数时,我已经尝试过并遇到问题。我得到流星是未定义的错误。有没有办法要求Meteor明确解决此问题?
Meteor
对象是不可访问的,流星公开的任何模型相关性也是如此。改善此过程将涉及在Mocha中实例化应用程序的环境,并将Meteor
对象暴露给您的测试。一旦有了更完整的测试解决方案,我将确保更新此答案。同时,如有任何问题或建议的改进,请随时与我联系。
我意识到这个问题已经得到回答,但是我认为可以使用更多上下文,以提供上述上下文的附加答案的形式。
我一直在通过流星进行一些应用程序开发以及程序包开发,这都是通过为流星核心以及大气层实现程序包实现的。
听起来您的问题实际上可能是三个部分的问题:
而且,听起来也可能有一个额外的问题:4.如何实现1、2和3的持续集成?
我一直在与流星核心团队的Naomi Seyfer(@sixolet)进行交谈并开始合作,以帮助在文档中获得所有这些问题的明确答案。
我向流星核心提交了一个初始拉取请求,地址为1和2:https : //github.com/meteor/meteor/pull/573。
我最近也回答了这个问题: 您如何运行流星测试?
我认为@Blackcoat已经明确回答了上面的3。
至于奖金4,我建议至少使用circleci.com对您自己的应用程序进行持续集成。他们目前支持@Blackcoat描述的用例。我有一个项目,其中我成功获得了用coffeescript编写的测试以使用摩卡运行单元测试,就像@Blackcoat所描述的那样。
为了持续集成流星核心和智能软件包,Naomi Seyfer和我正在与circleci的创始人聊天,看看我们是否可以在短期内实现出色的性能。
现在已弃用RTD,并由Velocity代替,Velocity是Meteor 1.0的官方测试框架。随着Velocity的大量开发,文档仍然相对较新。您可以在Velocity Github存储库,Velocity主页和Meteor测试手册(付费内容)上找到更多信息。
免责声明:我是Velocity的核心团队成员之一,也是本书的作者。
在rtd.xolv.io上查看RTD,它是Meteor的完整测试框架。它支持Jasmine / Mocha / custom,并且可以与普通JS和咖啡一起使用。它也包括结合单元/服务器/客户端覆盖范围的测试覆盖范围。
和示例项目在这里
一个博客,在这里解释与Meteor的单元测试
这里使用Selenium WebdriverJS和Meteor的e2e验收测试方法
希望有帮助。免责声明:我是RTD的作者。
我经常使用该页面并尝试了所有答案,但是从我的初学者开始,我发现它们相当混乱。一旦遇到任何麻烦,我就会对如何解决这些问题感到困惑。
该解决方案非常容易上手,即使尚未完全记录下来,因此我建议像我这样的人使用TDD,但不确定在JavaScript中进行测试的方式以及将哪些库插入其中的人推荐该解决方案:
https://github.com/mad-eye/meteor-mocha-web
仅供参考,我发现我还需要使用路由器Atmosphere软件包来创建“ / tests”路由来运行并显示测试结果,因为我不希望它每次加载时都会使我的应用程序混乱。
meteor-mocha-web
with mocha-phantomjs
进行自动化测试和CI。这就是我们使用的。全面披露-我是的维护者之一meteor-mocha-web
。
关于tinytest的用法,您可能想看看那些有用的资源:
此截屏视频中介绍了基本知识:https : //www.eventedmind.com/feed/meteor-testing-packages-with-tinytest
了解这一想法后,您将需要的公共API文档tinytest
。就目前而言,唯一的文档位于tinytest
包源的末尾:https : //github.com/meteor/meteor/tree/devel/packages/tinytest
另外,该截屏视频还讨论test-helpers
,您可能想在这里查看所有可用的帮助器:https :
//github.com/meteor/meteor/tree/devel/packages/test-helpers
每个中通常都有一些文档文件
挖掘流星包的现有测试将提供很多示例。一种方法是搜索流星的源代码Tinytest.
或test.
在其目录中
在即将发布的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(); }); });
我正在使用浏览器中的Meteor + Mocha 进行功能/集成测试。我有以下内容(为了更好的可读性,在coffescript中):
在客户端上...
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="https://stackoverflow.com/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基础架构。
流星+实习生
我以某种方式设法通过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');
});
}
});
});
要知道更多,这是我的要旨
注意:此解决方案仍处于初期阶段。我不知道我是否可以用这个做复杂的测试。但是我对此很有信心。