【问题标题】:How use mocha test framework with node.js and sails.js如何将 mocha 测试框架与 node.js 和sails.js 一起使用
【发布时间】:2014-03-14 23:08:12
【问题描述】:

我想在 node.js 中使用 mocha。我使用的最后一个测试框架是来自 Ruby on Rails 的 Rspec,因此我尝试以相同的方式进行测试,但我被 huge 框架和我可以使用的所有库所迷惑。

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

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

现在,我了解到我可以使用以下库:

而且我知道还有更多,这只是我在 mocha 官网上看到的列表。 据我所知,看起来 chai 是与 mocha 一起使用的,你怎么看?

而且,到目前为止,我还没有看到任何东西可以帮助我决定在哪里编写测试(好吧,当然是在 /test/ 中)以及如何组织所有内容。

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

这就是我计划组织测试的方式,你认为这是一个正确的架构吗?

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

你如何处理你的测试?

【问题讨论】:

  • Mocha with Sails 的基本用法见here

标签: javascript node.js testing mocha.js sails.js


【解决方案1】:

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

对于测试断言,最好的选项是 chai 或 should 或 expect,对于测试 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();
        });
    });
});

希望这会有所帮助。

【讨论】:

  • 这似乎是通常的建议。但是,如果组织一个项目,您实际上有一些测试,而不仅仅是一个测试文件呢?
  • 一个好的做法是为源文件夹中的每个文件创建一个同名文件 + 后缀,在克隆的文件夹树下,包含对该源文件的测试
【解决方案2】:

我发现博客文章 Unit Testing Sails.js Applications With Mocha 对于设置和组织测试很有帮助。

但是,因为我使用的是 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 来查看结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 2013-07-07
    • 2018-02-27
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 2015-12-08
    相关资源
    最近更新 更多