2016-04-25 78 views
0

您好我對NodeJs很新,我正在嘗試編寫我的第一個測試。簡單單元測試NodeJS/Express

我有點卡住了設置,所以我希望得到一些幫助。

我寫了這兩個功能:

app.js: 

var express = require('express') 
    , cors = require('cors') 
    , app = express(); 

app.get('/a_nice_jsonp',cors(corsOptions), function(req, res, next){ 
    var result = parseCookies(req); 
    res.jsonp(result); 
}); 

app.get('',function(req,res,next){ 
    res.statusCode = 200; 
    res.end() 
}); 

我不將其導出爲模塊,因爲它是我唯一的文件。

我認爲編寫測試非常簡單。我開始是這樣的:

app-test.js: 

var expect = require('expect.js'); 
var express = require('express'); 
var expressApp = express(); 

describe('app js test', function() { 
    describe('GET /', function() { 
    it('should respond to GET with empty path', function() { 
     expressApp.get('', function(req, res, body){ 
     expect(res.status).to.equal(200); 
     }); 
    }) 
    }); 
}); 

我想這真的讀起來就像一個簡單的任務,但我忽視了在測試的設置和如何做到這一點。

任何人都可以幫助我嗎?

編輯:上面的測試運行良好。但是,我很難測試.end()以及jsonp request中的result。我簡單不知道該怎麼做?!

+0

是否有錯誤信息?你是如何進行測試的? –

+0

對不起,我不夠精確。上述測試運行良好。但這幾乎是我能夠測試的唯一東西。例如。我將如何測試res.jsonp(結果)?我不知道如何解決這個問題。我會提供更多解釋。感謝提示 – Dribel

+0

沒有問題。那麼,您可以按照您檢查響應狀態的相同方式來執行此操作。而且,因爲響應是'jsonp'。然後,您可以嘗試使用一些虛函數來分析結果,以檢查結果是否有效。 –

回答

1

當你

expressApp.get('', function(req, res, body){ 
    expect(res.status).to.equal(200); 
    }); 

你是剛剛繪製的路線。

要測試你的REST API,你必須使用像supertest庫(有使用該鏈接快遞+摩卡測試的例子)

是這樣工作的

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

var app = express(); 

app.get('/a_nice_jsonp',cors(corsOptions), function(req, res, next){ 
    var result = parseCookies(req); 
    res.jsonp(result); 
}); 

app.get('',function(req,res,next){ 
    res.statusCode = 200; 
    res.end() 
}); 

describe('app js test', function() { 
    describe('GET /', function() { 
    it('should respond to GET with empty path', function (done) { 
     request(app) 
       .get('') 
       .expect(200) 
       .end(done) 
    }); 
    }); 
}); 

編輯帶獨立文件

app.js

var express = require('express') 
    , cors = require('cors') 
    , app = express(); 

app.get('/a_nice_jsonp',cors(corsOptions), function(req, res, next){ 
    var result = parseCookies(req); 
    res.jsonp(result); 
}); 

app.get('',function(req,res,next){ 
    res.statusCode = 200; 
    res.end() 
}); 
module.exports = app; 

app-test.js

var request = require('supertest'); 
var app = require('app.js'); 


describe('app js test', function() { 
    describe('GET /', function() { 
    it('should respond to GET with empty path', function (done) { 
     request(app) 
       .get('') 
       .expect(200) 
       .end(done) 
    }); 
    }); 
}); 
+0

感謝您的快速回復。我會研究超級特質,它是什麼以及所有這些。謝謝你的提示。 – Dribel

+0

一個簡單的問題。這可能聽起來有點愚蠢,但我怎麼知道實際的文件被測試?在我的測試中,我沒有注入或使用app.js文件? – Dribel

+0

我編輯它,現在你有兩個文件(app.js/app-test.js)。如您所見,應用程序在每個請求(應用程序)中都使用。 – QoP