gpt4 book ai didi

node.js - 使用 SocketIO 和 Express 进行 Node mocha API 测试

转载 作者:太空宇宙 更新时间:2023-11-04 02:04:38 24 4
gpt4 key购买 nike

我正在开发一个项目,我需要向 API 提供 HTTP 请求并处理用户通过套接字相互通信(为此我使用 Socket.io)。我的server.js文件的代码如下:

    let initHttpServer = () => {
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(require('./routes'));
app.get('/config.js', function(req,res) { res.write("var ROOT_URL='"+process.env.ROOT_URL+"'" + '\n'); res.end(); });
http.listen(port, function() {
console.log('express listening on port' + port);
console.log('a user connected');
});
return app;
}
.
.
.
conn.once('open', function() {
initHttpServer();
});
module.exports = initHttpServer;

我还有一个 io.on('connect'...) 函数,但为了简洁起见,我没有将其发布在这里(至少还没有)。当我使用 Postman 进行测试时,它工作得很好,但我在使用 mocha 和 Chai 测试 HTTP 端点时遇到了麻烦。我现在用于测试的代码如下:

chai.use(chaiHttp);

it('should get votes', function(done) { // <= Pass in done callback
chai.request('http://localhost:3000')
.get('/vote')
.then(function(res) {
res.should.have.status(200);
})
.catch(function(err) {
throw err;
});
});

当我运行 npm test 时,出现以下错误:

  Error: Timeout of 10000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

我尝试将测试函数放入 try/catch block 中,如下所示:

  it('should return all votes on /votes', function(done) {
try{
chai.request('http://127.0.0.1:3000')
.get('/vote')
.end(function(req,res) {
res.should.have.status(787432189700);
done();
});
--> done();
} catch(error) {
done(error);
}
});

如果我接受done();调用我用箭头(-->)指示的,我收到上述错误,但如果我保留它,它只会返回成功,而无需测试任何内容。我假设它是一个异步调用,因此在测试完成之前调用 done() 。因此,我不知道如何继续。我应该如何测试 API 端点?

谢谢!

最佳答案

第一:

您的 try/catch block 将不起作用,您正在进行异步调用。

第二个

最有可能的是,在这一行中: res.should.have.status(787432189700); 有错误,因此 done 没有被执行。

尝试这样的事情:

let chai = require('chai')
, chaiHttp = require('chai-http');
const expect = require('chai').expect;

chai.use(chaiHttp);

describe('Some test', () => {
it('Lets see', (done) => {
chai.request('http://localhost:3000')
.get('/vote')
.end(function (err, res) {
expect(err).to.be.null;
expect(res).to.have.status(200);
done();
});
});
});

请注意回调函数的第一个参数是错误

关于node.js - 使用 SocketIO 和 Express 进行 Node mocha API 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44771250/

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