我试图获得使用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)我错过了什么或者做错了什么?
发布于 2021-06-15 04:27:59
您没有启动HTTP服务器。您应该在before钩子中启动HTTP服务器,并在after钩子中删除它。
此外,您可以让模块而不是根据需要使用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)https://stackoverflow.com/questions/67971530
复制相似问题