2012-07-23 193 views
3

我正在使用mocha.js和supertest.js来测试我的json服务器对express.js的请求。这是我进口:node.js摩卡测试请求

request = require('supertest') 
assert = require('assert') # Node assert 
app  = require('../app') # Vanilla express app 

这是我在明确应用要求执行:

app.get '/user/:id', (req, res) -> 
    res.json {} 

,这是我的测试:

describe 'GET /user/:id', -> 
    it 'should return the user data if user found', (done) -> 
    request(app) 
    .get("/user/some_id") 
    .end((err, res) -> 
     assert.equal('test', 'test') 
     done() 
    ) 

这工作,但如果我改变我要求:

app.get '/user/:id', (req, res) -> 
    User.findById req.param('id'), (err, doc) -> 
    res.json {} 

摩卡测试只是超时。我猜这与查找是异步的事实有关,测试不会等待它完成。我该如何解决这个问题?

回答

1

切换到https://github.com/mikeal/request/解决了它。我现在做

这是我现在的测试:

describe 'GET /user/:id', -> 
    it 'should return the user data if user found', (done) -> 
    request.get(
     'http://localhost:31000/user/500d365abb75e67d0c000006' 
     , (err, res, body) -> 
     json = JSON.parse body 
     assert.equal(res.statusCode, 200) 
     assert.equal(json._id, '500d365abb75e67d0c000006') 
     done() 
    ) 

一切工作为目前预计,但我还是想知道它是否可以使用supertest或誓言此。

+0

我正在使用mikeal/request并且它不工作= [ – ThomasReggi 2014-01-18 22:26:23

+0

需要'done();'request内部=] – ThomasReggi 2014-01-18 22:27:58

3

尝试增加超时:

mocha --timeout 5000 

默认为2000毫秒,可能太短。从documentation