运行 将 chai-http 用于节点服务的 Mocha 测试用例出错
Error with running the Mocha test cases using chai-http for node services
我试图掌握使用 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)
我试图掌握使用 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)