gpt4 book ai didi

node.js - 在 Mocha 测试中将 Superagent/Supertest 与 Express 应用程序结合使用

转载 作者:搜寻专家 更新时间:2023-10-31 22:19:27 24 4
gpt4 key购买 nike

我正在尝试使用 Mocha 为我正在开发的 REST API 编写测试。我发现了 Superagent,它可以让我发出 HTTP 请求。我正在使用传递给 Superagent 的 Express 应用程序,但是在尝试使用以这种方式传递的 Express 应用程序运行这些测试时,我遇到了关于 Mongoose 的奇怪错误。这是我的测试代码:

var
// Node modules
mongoose = require('mongoose')
, async = require('async')
, should = require('should')
, request = require('superagent')

, app = require('../../app_mocked')
, Link = mongoose.model('Link')

request = request(app)

describe('Links resource', function () {

var userId = '50dc81654dca01006b000005'
, linkId
, sampleLink = {
'uri': 'http://test.com/',
'meta': {
'title': 'Test',
'desc': 'Test link desc'
},
'shares': [{
'uid': userId,
'date': new Date(),
'message': 'Test link message'
}]
}

it('POST /api/users/:id/links', function (done) {
request(app).post('/api/users/' + userId + '/links')
.send(sampleLink)
.end(function (err, res) {
res.should.have.status(200)
res.body.should.have.property('id')

linkId = res.body.id

done()
})
})

it('GET /api/users/:id/links', function (done) {
request(app).get('/api/users/50dc81654dca01006b000005/links')
.end(function (err, res) {
res.should.have.status(200)
res.body.should.have.lengthOf(1)

done()
})
})

})

我得到的错误是这样的:

1) Links resource POST /api/users/:id/links:
TypeError: Cannot call method 'update' of null
at MongoStore.MONGOSTORE.set (/Users/Oliver/Development/Personal/Reader/node_modules/connect-mongodb/lib/connect-mongodb.js:146:15)
at Session.save (/Users/Oliver/Development/Personal/Reader/node_modules/express/node_modules/connect/lib/middleware/session/session.js:63:25)
at ServerResponse.res.end (/Users/Oliver/Development/Personal/Reader/node_modules/express/node_modules/connect/lib/middleware/session.js:280:19)
at ServerResponse.res.send (/Users/Oliver/Development/Personal/Reader/node_modules/express/lib/response.js:149:8)
at ServerResponse.res.json (/Users/Oliver/Development/Personal/Reader/node_modules/express/lib/response.js:191:15)
at ServerResponse.res.send (/Users/Oliver/Development/Personal/Reader/node_modules/express/lib/response.js:117:21)
at Promise.exports.create (/Users/Oliver/Development/Personal/Reader/server/resources/links.js:29:9)

但是,这个错误只是偶尔出现。 1/5 次,测试将毫无问题地通过。这让我觉得测试有时会在 app 完全加载之前运行。

或者,如果我在单独的 session 中运行该应用程序并将 URL 传递给 request,如下所示,那么它每次都有效:

request = request('http://localhost:3000')

是这个原因吗?如果是这样,我如何才能仅在 app 完全加载后运行测试?

最佳答案

原来我必须指定一个 before 测试来等待 MongoDB 连接打开,然后再运行测试。

before(function (done) {
mongoose.connection.on('open', done)
})

关于node.js - 在 Mocha 测试中将 Superagent/Supertest 与 Express 应用程序结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14762443/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com