node.js mocha测试请求

时间:2012-07-23 12:49:22

标签: node.js testing tdd express mocha

我正在使用mocha.js和supertest.js来测试我的json服务器对express.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 {}
摩卡测试只是超时了。我猜这与查找异步并且测试不等待它完成的事实有关。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

尝试增加超时时间:

mocha --timeout 5000

默认值为2000毫秒,可能太短。来自documentation

答案 1 :(得分: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()
    )

现在一切都按预期工作,但我仍然想知道是否可以使用超级或誓言。