我想在我的 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()需要一個指向服務器應用程式的引數,如何匯出/匯入此createServer()函式并將其傳遞到 chai 物件的請求方法中?
uj5u.com熱心網友回復:
您可以使用require.main來區分您的檔案是由 Node 直接運行還是作為模塊匯入。
當檔案直接從 Node.js 運行時,
require.main設定為其模塊。這意味著可以通過 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 };
當您createServer從server.js檔案中匯入時,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');
});
});
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/378333.html
下一篇:對于查詢引數過濾的GET請求,json-server回傳HTTP200而不是404,這里的最佳實踐是什么以及如何回傳404?
