簡體   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