原文地址:https://themeteorchef.com/blog/meteor-1-3-from-a-20-000-foot-view/
Meteor 1.3新增的NPM支持能够帮助开发者构建更加模块化的应用,但是假如我们不能保证应用按照我们的需求工作,那么这将毫无意义。我们需要开发新特性和重构代码,并且对这些工作有足够的信心。所以自动化测试是成功的关键。Meteor 1.3对模块的测试给予我们一个官方的回应。现在开发者能够将他们的代码分割成更小,更容易维护的小片段,他们现在就可以更高效地测试应用了。
之前,由Xolv.io开发的Velocity被推荐为测试Meteor应用的官方解决方案。但是Xolv.io停止开发了Velocity,然后把开发官方测试工具的责任交给了MDG。看起来他们给出了测试Meteor应用的非常棒的解决方案。
测试如何工作?
Meteor 1.3的测试文件有一个特殊的后缀名.tests.js
,并且它们能在任何文件夹下。这里是一个简单的单元测试例子,基于我们之前的模块cat-stuff.js
:
import { mocha } from 'meteor/avital:mocha';
import { chai, assert } from 'meteor/practicalmeteor:chai';
import laserPointer from './cat-stuff.js';
describe( 'Cat Stuff', () => {
it( 'draws a laser pointer\'s position as a number', () => {
let laser = laserPointer();
assert.typeOf( laser.position, 'number' );
});
});
尽管不是必须的,这里我们导入practicalmeteor:chai
扩展包到我们的测试文件让我们能够获得Chai assertion library。Mocha有它自己的assertion library,但是一些开发者更倾向于使用Chai。他们都能完成工作!这里,我们期望laserPointer()
犯法返回一个对象,其中的position
参数是一个数字类型,使用Chai的assert.typeOf()
方法,我们可以确认这点。
如何运行测试
目前,测试需要两步来完成,首先,像往常一样运行你的应用:
meteor
然后在另一个端口上运行测试汇报(假设这里应用运行端口为3000)
meteor test --driver-package avital:mocha --port 3100
浏览器打开http://localhost:3100
,你应该看到一个报表展示了你的测试。一个好消息是,这里的测试是响应式的。如果你修改了测试的代码或是应用的代码,测试会自动重新运行。这和Velocity的方法类似,如果你有时间的话,可以较为平滑地将测试按照官方解决方案迁移。
The Meteor Guide’s (draft) article on testing讲解了对于许多不同类型测试的支持,比如单元测试,集成测试,验收测试/端到端测试,负载测试。目前测试只能用Mocha来写 (using the avital:mocha
package),但在未来不会有这些限制。