使用chai-http为节点服务运行Mocha测试用例时出错



我试图获得使用mocha和chai-http编写测试用例的基本技巧,我已经编写了如下的测试用例

let chai = require('chai');
let chaiHttp = require('chai-http');
const should = chai.should;
const expect = chai.expect;
const server = "http://127.0.0.1:3000"
chai.use(chaiHttp);
describe('Create Login and Register', () => {
it('should login using credentials', (done) => {
chai.request(server)
.get('/register')
.send()
.then((res: any) => {
res.should.have.status(200);
done();
}).catch((err: any) => { done(err) })
})
})

我尝试测试的服务如下

const express = require('express');
const app = express();
app.get('/register', function (req, res) {
res.json({
'state': true,
'msg': 'Register endpoint',
'data': {
'username': 'Swarup',
'email': 'abc@gmail.com',
'password': 'P@1234',
'fullName': 'Swarup Default'
}
});
});
app.listen(3000, () => { console.log('started') })
module.exports = app;

但是当我运行测试用例时,我得到了一个错误,如下所示

1 failing
1) Create Login and Register
should login using credentials:
Error: connect ECONNREFUSED 127.0.0.1:3000
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1146:16)

我错过了什么或做错了什么?

您没有启动HTTP服务器。您应该在before钩子中启动HTTP服务器,并在after钩子中拆除它。

此外,您可以让模块NOT根据需要使用require.main === module条件执行条件块中的代码。因为我们将在测试文件中使用require('./app'),所以我们不想在需要时启动HTTP服务器。

例如

app.js:

const express = require('express');
const app = express();
app.get('/register', function (req, res) {
res.json({
state: true,
msg: 'Register endpoint',
data: {
username: 'Swarup',
email: 'abc@gmail.com',
password: 'P@1234',
fullName: 'Swarup Default',
},
});
});
if (require.main === module) {
app.listen(3000, () => {
console.log('started');
});
}
module.exports = app;

app.test.js:

let chai = require('chai');
let chaiHttp = require('chai-http');
let app = require('./app');
const expect = chai.expect;
const endpoint = 'http://127.0.0.1:3000';
chai.use(chaiHttp);
describe('Create Login and Register', () => {
let server;
before(() => {
server = app.listen(3000, () => {
console.log('started for testing');
});
});
after(() => {
server.close();
});
it('should login using credentials', (done) => {
chai
.request(endpoint)
.get('/register')
.send()
.then((res) => {
expect(res).to.have.status(200);
done();
})
.catch((err) => {
done(err);
});
});
});

测试结果:

Create Login and Register
started for testing
✓ should login using credentials

1 passing (18ms)

最新更新