如何使用mochatesting框架与node.js和sails.js
我想为node.js使用mocha。 我使用的最后一个testing框架是Ruby on Rails的Rspec,所以我试图用相同的方法来完成,但是我得到了巨大的框架和我可以使用的所有库。
我正在跟进官方上手,但并没有解释如何组织testing。
http://visionmedia.github.io/mocha/#installation
现在,我正在阅读,我可以使用以下库:
- https://github.com/visionmedia/should.js – testing模型实例的东西。
- https://github.com/LearnBoost/expect.js – 基于should.js的简约BDD断言工具包
- http://chaijs.com/ – 看起来很大,包括应该,期待和另一个lib
- https://github.com/visionmedia/better-assert – 使用callsite进行自我logging失败消息的更好的c样式断言。 (到目前为止我其实并不了解这个目的,看起来并不比别人好)
- https://github.com/rjanicek/mocha.js-haxe – 看起来是浏览器端,但摩卡也表示,它正在运行浏览器端。
而且我知道还有更多,这只是我在摩卡官方网站上看到的名单。 对于我所能理解的,看上去chai是用摩卡咖啡的,你怎么看?
而且,到目前为止,我从来没有看到任何东西来帮助我决定在哪里写testing(当然,在/testing/当然),以及如何组织一切。
我也使用伟大的sails.js框架(基于express)和pomelo.js为不同的项目,我需要在这两个框架上使用相同types的testing,所以我正在寻找一个通用的架构和库,我可以同时使用(所以,sails.js没有特定的东西,但可以直接使用任何其他框架)
这是我计划组织testing的方式,你认为这是一个正确的架构吗?
节点的主要问题是有很多的框架,插件,库和我不知道什么是最好的select,node.js是一个巨大的社区真的很大,真的很难概括所有的可能性。
你如何处理你的testing?
我发现unit testingSails.js应用程序与Mocha有助于设置和组织testing。
但是,因为我使用的是Sails版本0.10.5,所以我决定清理一下Gruntconfiguration。 我用以下代码在tasks/config/
文件夹中添加了一个名为mocha.js
的文件:
module.exports = function(grunt) { grunt.config.set('mochaTest', { test: { options: { reporter: 'spec' }, src: ['tests/**/*.spec.js'] } }); grunt.loadNpmTasks('grunt-mocha-test'); };
然后我通过在tasks/register
创build名为test.js
的文件来tasks/register
。 在这个文件里面,我添加了下面的代码。
module.exports = function (grunt) { grunt.registerTask('test', [ 'mochaTest' ] ); };
然后您可以运行grunt test
来查看结果。
在testing文件夹中创build一个名为test.js的文件
为了testing断言最好的select是像柴或应该或预期的东西,testingrestAPI或发送HTTP请求,你可以使用超级。 首先包含testing文件中的所有库
"use strict" var should = require('should'); var assert = require('assert'); var request = require('supertest');
现在为业务逻辑testing包括你需要的文件。 假设我在api / services里有一个名为LoginService的文件,你可以通过下面的方法来包含它
var loginService = require('../api/services/LoginService');
现在你可以开始testing你的testing块,看起来像是类似的东西
describe('Sample Test', function(){ var url = "http://localhost:1337/"; before(function(done){ //Anything that needed to be done before executing; done(); }); it("Should test rest api", function(done){ var email = {'email':'sample@email.com'}; //Calling rest api with email as a part of req body request(url) .post('api/v1/email/isvalid') .send(email) // end handles the response .end(function(err, res) { if (err) { throw err; } // Check response res.should.have.status(200) ; done(); }); }); it("Should test business logic", function(done){ loginService.someFunction(someParameter, function callback(data){ //do your logic test here done(); }); }); });
希望这可以帮助。