问题描述
我试图掌握使用 mocha 和 chai-http 编写测试用例的基本技巧,我编写的测试用例如下
re.search("image:\s*\"?(.+?/(.+?):(.+?))\"?$",str)
我要测试的服务如下
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;
我遗漏了什么或做错了什么?
解决方法
您没有启动 HTTP 服务器。您应该在 before
钩子中启动 HTTP 服务器并在 after
钩子中拆除它。
此外,您可以使用 require.main === module
条件让您的模块NOT执行条件块中的代码。因为我们将 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)