繁体   English   中英

如何将mocha测试框架与node.js和sails.js一起使用

[英]How use mocha test framework with node.js and sails.js

我想将mocha用于node.js. 我使用的最后一个测试框架是来自Ruby on Rails的Rspec,所以我试图以相同的方式进行,但是我被巨大的框架和我可以使用的所有库所困扰。

我正在关注官方的入门,但它没有解释如何组织测试。

http://visionmedia.github.io/mocha/#installation

现在,我正在阅读我可以使用以下库:

而且我知道还有更多,这只是我在摩卡官方网站上看到的列表。 根据我的理解,看起来chai是与摩卡一起使用的,你怎么看?

而且,到目前为止,我从来没有看到任何东西来帮助我决定在哪里编写测试(好吧,在/ test /,当然)以及如何组织一切。

我也使用伟大的sails.js框架(基于express)和pomelo.js用于不同的项目,我需要在两个框架上使用相同类型的测试,所以我正在寻找一个通用的架构和库,我可以在两者上使用(所以,不是特定于sails.js的东西,但可以直接从任何其他框架使用)

这就是我计划组织测试的方式,你认为这是一个正确的架构吗? 在此输入图像描述

节点的主要问题是有很多框架,插件,库,我不知道什么是最好的选择,node.js对于一个大社区真的很大,而且很难对所有可能性进行概述。

你如何处理你的测试?

我发现博客文章单元测试Sails.js应用程序与摩卡有助于设置和组织测试。

但是,因为我使用Sails版本0.10.5,所以我决定稍微清理Grunt配置。 我在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创建一个名为test.js的文件来注册该任务。 在这个文件里面,我添加了以下代码。

module.exports = function (grunt) {
    grunt.registerTask('test', [
            'mochaTest'
        ]
    );
};

然后,您可以运行grunt test以查看结果。

在测试文件夹中创建名为test.js的文件

对于测试断言最佳选项是像柴或应该或期望的,对于测试rest api或发送http请求你可以使用supertest。 首先包括测试文件中的所有库

"use strict"
var should = require('should');
var assert = require('assert');
var request = require('supertest');  

现在,业务逻辑测试包括您需要的文件。 假设我在api / services中有一个名为LoginService的文件,您可以通过以下方式将其包含在内

var loginService = require('../api/services/LoginService');

现在您可以开始测试您的测试块看起来像类似的东西

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();
        });
    });
});

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM