3

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

4

5 回答 5

6

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

npm install
NODE_ENV=testing node app.js &
npm mocha
pkill node

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

这是代码:

应用程序.js:

...
var port = 8080
if(process.env.NODE_ENV === "testing")
    port = 3000;
...

测试.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(); 
          }); 
        }); 
      });
    });
于 2012-11-12T02:26:11.113 回答
1

我找到了我正在寻找的东西:testrest。我不喜欢它基于 .txt 文件的语法——我适应了使用 .json 文件代替我的规范。

于 2012-09-10T08:51:52.097 回答
0

我建议尝试一下Buster.JS。您可以进行异步测试、模拟/存根并启动服务器。

于 2012-09-03T10:01:52.810 回答
0

它还在vows之上构建了api-easy,第一个似乎很容易使用,但第二个它非常灵活和强大

于 2012-10-18T00:28:47.173 回答
0

没有正确的方法,但我确实为我的个人目录结构创建了一个种子应用程序,并包含@norman784 建议的誓言测试。

你可以克隆它:git clone https://github.com/hboylan/express-mongoose-api-seed.git

或者使用 npm:npm install express-mongoose-api-seed

于 2014-02-25T20:25:44.887 回答