如何为 chai request() 导入服务器应用程序?
how to import server app for chai request()?
我想 运行 在我的 node express 服务器上进行测试,但是这个应用程序是这样启动服务器的:
createServer()
.then(server => {
server.listen(PORT);
Log.info(`Server started on http://localhost:${PORT}`);
})
.catch(err => {
Log.error("Startup failure.", { error: err });
process.exit(1);
});
并且我知道 chai.request()
需要一个指向服务器应用程序的参数,我如何 export/import 这个 createServer()
函数并将它传递到请求方法中柴对象?
您可以使用 require.main 来区分您的文件是 运行 直接由 Node 还是作为模块导入的。
When a file is run directly from Node.js, require.main
is set to its module. That means that it is possible to determine whether a file has been run directly by testing require.main === module
.
例如
server.js
:
const express = require('express');
const PORT = 3000;
async function createServer() {
const app = express();
app.get('/', (req, res) => {
res.send('hello world');
});
return app;
}
if (require.main === module) {
createServer()
.then((server) => {
server.listen(PORT);
console.info(`Server started on http://localhost:${PORT}`);
})
.catch((err) => {
console.error('Startup failure.', { error: err });
process.exit(1);
});
}
module.exports = { createServer };
当您从 server.js
文件导入 createServer
时,if
语句块将不会执行。因为要在测试用例中创建服务器实例。
server.test.js
:
const { createServer } = require('./server');
const chai = require('chai');
const chaiHTTP = require('chai-http');
const { expect } = require('chai');
chai.use(chaiHTTP);
describe('70284767', () => {
it('should pass', async () => {
const server = await createServer();
chai
.request(server)
.get('/')
.end((err, res) => {
expect(err).to.be.null;
expect(res.text).to.be.equal('hello world');
});
});
});
我想 运行 在我的 node express 服务器上进行测试,但是这个应用程序是这样启动服务器的:
createServer()
.then(server => {
server.listen(PORT);
Log.info(`Server started on http://localhost:${PORT}`);
})
.catch(err => {
Log.error("Startup failure.", { error: err });
process.exit(1);
});
并且我知道 chai.request()
需要一个指向服务器应用程序的参数,我如何 export/import 这个 createServer()
函数并将它传递到请求方法中柴对象?
您可以使用 require.main 来区分您的文件是 运行 直接由 Node 还是作为模块导入的。
When a file is run directly from Node.js,
require.main
is set to its module. That means that it is possible to determine whether a file has been run directly by testingrequire.main === module
.
例如
server.js
:
const express = require('express');
const PORT = 3000;
async function createServer() {
const app = express();
app.get('/', (req, res) => {
res.send('hello world');
});
return app;
}
if (require.main === module) {
createServer()
.then((server) => {
server.listen(PORT);
console.info(`Server started on http://localhost:${PORT}`);
})
.catch((err) => {
console.error('Startup failure.', { error: err });
process.exit(1);
});
}
module.exports = { createServer };
当您从 server.js
文件导入 createServer
时,if
语句块将不会执行。因为要在测试用例中创建服务器实例。
server.test.js
:
const { createServer } = require('./server');
const chai = require('chai');
const chaiHTTP = require('chai-http');
const { expect } = require('chai');
chai.use(chaiHTTP);
describe('70284767', () => {
it('should pass', async () => {
const server = await createServer();
chai
.request(server)
.get('/')
.end((err, res) => {
expect(err).to.be.null;
expect(res.text).to.be.equal('hello world');
});
});
});