如何使用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(); }); }); }); 

希望这可以帮助。