2016-04-26 140 views
-1

剛剛創建了一個新的快速開源中間件項目。我希望能夠從它生成的路由單元測試json響應...無論如何,我可以做到這一點,而不會實際發射一個咕嚕發球和檢查網址?節點快速單元測試JSON響應

那麼目標將是好歹運行路線,但不是JSON發送到瀏覽器,我可以將其存儲在一個變量的/ etc ...

什麼中間件的作用是基於在JavaScript註釋路線文件。

https://github.com/kmgilbert100/annotation-route-loader

我想提出我的單元測試包括根據試驗/路由/ **/*

注意app.use(loader)的JSON響應,你可以在上面看到的URL將加載所有路由

下面是當前摩卡測試

// npm modules 
const chai = require('chai'); 
const _ = require('lodash'); 
const express = require('express'); 
// local modules 
var routeLoader = require('../src/index'); 
// testing module methods 
const assert = chai.assert; 

describe('annotation-route-loader',() => { 

    // store collection of routes 
    var routePaths = []; 

    before("Create collection to check from",() => { 

     var loader = routeLoader({ 
      baseUrl: '/', 
      path: './routes', 
      pattern: '**/*.js', 
      params: { 
       sports: [ 
        'footbal', 
        'baseball', 
        'motocross', 
        'hockey' 
       ] 
      } 
     }); 

     loader['stack'].forEach(stack => { 

      routePaths.push({ 
       path: stack.route.path, 
       methods: stack.route.methods 
      }) 

     }) 

    }); 


    it('Should make sure the default path is valid', (done) => { 

     // Try And Find Path 
     var defaultPath = _.find(routePaths, {path: '/'}); 
     assert.isObject(defaultPath); 
     assert.isTrue(defaultPath.methods.get); 

     // Make Callback 
     done() 

    }); 


    it('Should make sure the sports path is valid', (done) => { 

     // Try And Find Path 
     var defaultPath = _.find(routePaths, {path: '/sports'}); 
     assert.isObject(defaultPath); 
     assert.isTrue(defaultPath.methods.get); 

     // Make Callback 
     done() 

    }); 


    it('Should make sure the sports list path is valid', (done) => { 

     // Try And Find Path 
     var defaultPath = _.find(routePaths, {path: '/sports/list'}); 
     assert.isObject(defaultPath); 
     assert.isTrue(defaultPath.methods.get); 

     // Make Callback 
     done() 

    }); 

}) 
+1

分享一些代碼,請。你有什麼嘗試?你有沒有嘗試過使用mock? –

+0

提供 - 我註銷了路由器實例/ etc無法找到任何幫助..沒有挖出太多表達api tho,看看它如何處理它 –

+0

看看郵差,它有測試套件內置,允許您使用預定義的json測試endpoint/api,並且測試用例可以用JS編寫。 –

回答

0

感謝您的意見!

https://github.com/visionmedia/supertest

結束了使用supertest來完成這項工作!

請參見下面的一段:

var request = require('supertest'); 
var express = require('express'); 

var app = express(); 

app.get('/user', function(req, res) { 
    res.status(200).json({ name: 'tobi' }); 
}); 

request(app) 
    .get('/user') 
    .expect('Content-Type', /json/) 
    .expect('Content-Length', '15') 
    .expect(200) 
    .end(function(err, res) { 
    if (err) throw err; 
    });