ExpressJS服务器类chaiHttp
我正在写一些基本的测试 这是我的ExpressJS服务器类chaiHttp,express,chai,chai-http,Express,Chai,Chai Http,我正在写一些基本的测试 这是我的server.js import express from 'express'; export default class Server { constructor(options) { this.port = options.port; this.express = express(); } initialize() { this.configureRoutes(); this.configureMiddlewar
server.js
import express from 'express';
export default class Server {
constructor(options) {
this.port = options.port;
this.express = express();
}
initialize() {
this.configureRoutes();
this.configureMiddleware();
}
start() {
this.express.listen(this.port, () => {
console.log(`Server listening on port ${this.port}!`);
})
}
configureMiddleware() {
// TODO
}
configureRoutes() {
this.express.get('/', (req, res) => {
res.status(200).send('Hello World!');
});
}
};
我喜欢类方法,因为它允许我注入不同类型的配置
这是我的index.js
,我没有在测试中使用它,但它显示了server.js
正在工作
import dotenv from 'dotenv';
import Server from './server';
dotenv.config();
const port = process.env.PORT;
const options = {
port
};
let server = new Server(options);
server.initialize();
server.start();
export default server;
最后是我的server\u spec.js
import dotenv from 'dotenv';
import chai from 'chai';
import chaiHttp from 'chai-http';
import Server from '../../src/server';
dotenv.config();
chai.use(chaiHttp);
describe('Red Pill Server', () => {
let server;
before('setup server', done => {
const port = process.env.PORT;
console.log(`port ${port}`);
const options = {
port
};
server = new Server(options);
server.initialize();
server.start();
done();
});
it('should get a response from server', done => {
chai.request(server).get('/').end( (err, res) => {
if (err) {
console.log(`err ->`, err);
} else {
expect(res).to.have.status(200);
}
done();
})
});
});
我得到了
TypeError:app.address不是一个函数
,我对此进行了研究,但我无法找出问题所在。因为我正在导出类并在测试中初始化。尝试将其添加到app.js文件中:
module.exports = server
最后,通过一些小改动,它开始工作了 第一步是认识到
chai
期待着“监听服务器”,所以在server.js
中我做了这个小改动
start() {
return this.app.listen(this.port, () => {
console.log(`Server listening on port ${this.port}!`);
})
}
在这个改变之后,我改变了描述测试的方式
describe('Red Pill Server', () => {
let app;
beforeEach(done => {
const port = process.env.PORT;
const host = process.env.HOST;
console.log(`port ${port}`);
const options = {
port,
host
};
let server = new Server(options);
server.initialize();
app = server.start();
done();
});
afterEach(done => {
app.close();
done();
});
it('should get a response from server', done => {
chai.request(app).get('/').end( (err, res) => {
expect(res).to.have.status(200);
expect(res.body).to.eql({ message: 'Hello World!' });
done();
});
});
});
就像我在每次测试中创建/销毁服务器一样,在应用程序中,我没有一个名为
app.js
import express from 'express';
export default class Server {
constructor(options) {
this.port = options.port;
this.express = express();
}
initialize() {
this.configureRoutes();
this.configureMiddleware();
}
start() {
this.express.listen(this.port, () => {
console.log(`Server listening on port ${this.port}!`);
})
}
configureMiddleware() {
// TODO
}
configureRoutes() {
this.express.get('/', (req, res) => {
res.status(200).send('Hello World!');
});
}
};