2016-04-25 46 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