如何对使用Express + Mongoose构建的NodeJs REST API服务器进行单元测试?

pat*_*rit 3 rest unit-testing mongoose node.js express

我有一个使用Express,Mongoose和config的REST API服务器.我想对我的API进行单元测试.基本上,在端口x上打开一个临时Web服务器,在端口y上打开一个空的mongo-database,执行一些API调用(包括获取和放置)并验证我得到的内容,然后关闭临时服务器并在测试完成后删除测试数据库.做这个的最好方式是什么?我一直在看mocha/rewire,但不知道如何设置临时服务器和数据库,也不确定最佳实践是什么.

小智 6

我使用Jenkins(持续集成服务器)和Mocha来测试我的应用程序,我发现自己遇到了和你一样的问题.我配置了Jenkins所以它会执行这个shell命令:

npm install
NODE_ENV=testing node app.js &
npm mocha
pkill node
Run Code Online (Sandbox Code Playgroud)

这将运行服务器以执行测试,然后将其杀死.这也设置了NODE_ENV环境变量,因此我可以在测试时在不同的端口上运行服务器,因为Jenkins已经使用了端口8080.

这是代码:

app.js:

...
var port = 8080
if(process.env.NODE_ENV === "testing")
    port = 3000;
...
Run Code Online (Sandbox Code Playgroud)

test.js:

var request = require('request'),
    assert = require('assert');

    describe('Blabla', function() {
      describe('GET /', function() {
        it("should respond with status 200", function(done) {
          request('http://127.0.0.1:3000/', function(err,resp,body) {
            assert.equal(resp.statusCode, 200);
            done(); 
          }); 
        }); 
      });
    });
Run Code Online (Sandbox Code Playgroud)