[英]How to setup and teardown a Web server with Jest
我正在使用 Jest,需要設置一個 Web 服務器來運行測試,然后再將其拆除。
我該如何實施?
您可以使用beforeAll
和afterAll
Jest 全局方法來執行此操作。
// server.js
import Fastify from 'fastify';
const fastify = Fastify({
logger: false
});
const PORT = process.env.PORT || 8080;
function startServer()
{
return new Promise(function (resolve) {
fastify.get('/init', function(req, res){
res.status(200).send('INIT');
});
fastify.listen(PORT, function(err, addr)
{
if(err)
{
console.log(err);
process.exit(1);
}
resolve(addr);
});
});
}
function endServer()
{
return new Promise(function (resolve) {
fastify.close(resolve);
});
}
export {startServer, endServer};
// fetch.js
import fetch from 'node-fetch';
async function get(url_str, opts_obj)
{
let res = await fetch(url_str);
return (opts_obj && opts_obj.json) ? await res.json() : await res.text();
}
export {get};
// main.test.js
import { startServer, endServer } from './server.js';
import { get } from './fetch.js';
beforeAll(function(){
console.log('Jest - beforeAll()');
return startServer().then(function(addr){
console.log('Server started!');
console.log(`Web server listening on ${addr}!`);
});
});
test('Get data from server', async function(){
let res = await get('http://localhost:8080/init');
expect(res).toBe('INIT');
});
afterAll(function(){
console.log('Jest - afterAll()');
return endServer().then(function(){
console.log('Server closed!');
});
});
npx jest main
注意:鑒於我們使用的是 ES 模塊,我們必須在
jest
命令前加上前綴:NODE_OPTIONS=--experimental-vm-modules npx jest main
通過 Jest 文檔查看ECMAScript 模塊。
您還可以使用現代異步/等待語法:
server.js
模塊:// server.js
import Fastify from 'fastify';
const fastify = Fastify({
logger: false
});
const PORT = process.env.PORT || 8080;
async function startServer()
{
fastify.get('/init', function(req, res){
res.status(200).send('INIT');
});
return await fastify.listen(PORT);
}
async function endServer()
{
return await fastify.close();
}
export {startServer, endServer};
main.test.js
:// main.test.js
import { startServer, endServer } from './server.js';
import { get } from './fetch.js';
beforeAll(async function(){
console.log('Jest - beforeAll()');
let addr = await startServer();
console.log(`Server listening on ${addr}!`);
});
test('Get data from server', async function(){
let res = await get('http://localhost:8080/init');
expect(res).toBe('INIT');
});
afterAll(async function(){
console.log('Jest - afterAll()');
await endServer();
});
4.
一樣運行 jest 命令。注意:
type
是package.json
中的module
,即 Node.js 將 .js 文件解釋為 ES 模塊。 這就是我們可以使用import
語法的原因。
注意:安裝了以下依賴項:
fastify
node-fetch
注意:Fastify 被用作 Web 服務器,因為它有一個
close
方法,這使得關閉服務器看起來很簡單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.