Javascript 如何使用TestenEnvironment作为NodeEnvironment启动express服务器?
在研究了这些问题之后: 我能够做到这一点: package.jsonJavascript 如何使用TestenEnvironment作为NodeEnvironment启动express服务器?,javascript,express,jestjs,Javascript,Express,Jestjs,在研究了这些问题之后: 我能够做到这一点: package.json { "name": "my-project", "jest": { "testEnvironment": "./testEnvironment.js", } } testEnvironment.js const express=require('express'); //const NodeEnvironment=require('jest-environment-n
{
"name": "my-project",
"jest": {
"testEnvironment": "./testEnvironment.js",
}
}
testEnvironment.js
const express=require('express');
//const NodeEnvironment=require('jest-environment-node');//用于服务器节点应用程序
const NodeEnvironment=require('jest-environment-jsdom');//用于浏览器js应用程序
类ExpressEnvironment扩展了NodeEnvironment{
构造函数(配置,上下文){
超级(配置,上下文);
}
异步设置(){
等待super.setup();
常量app=express();
this.global.server=app.listen(0,“127.0.0.1”,()=>{
log(`Running express server on'${JSON.stringify(server.address())}'…`);
如何使setup()等待app.listen回调完成,
i、 例如,服务器已正确启动。
});
app.use(express.static('../testfiles'));
}
异步拆卸(){
this.global.server.close();
等待super.teardown();
}
运行脚本(脚本){
返回super.runScript(script);
}
}
module.exports=ExpressEnvironment;
如何使setup()
等待app.listen()
回调完成,即服务器已正确启动
以前,当我使用beforeAll()
时,我的代码工作正常,因为我可以使用done()
通过beforeAll()传递的异步回调:
const express=require('express');
常量app=express();
var服务器;
之前(异步(完成)=>{
服务器=app.listen(0,“127.0.0.1”,()=>{
log(`Running express server on'${JSON.stringify(server.address())}'…`);
完成();
});
app.use(express.static('../testfiles'));
});
毕竟(()=>{
server.close();
});
如何等效于NodeEnvironmentsetup()
函数上的beforeAlldone()
回调?您可以通过等待listen,将其包装在承诺中,并调用承诺解析作为对服务器listen的回调来实现这一点
const-app=express();
让服务器;
等待新的承诺(resolve=>server=app.listen(0,“127.0.0.1”,resolve));
this.global.server=服务器;
您还可以设置一个自定义回调,该回调只调用promise resolver作为应用程序的第三个参数。listen()
,它应该运行该代码,然后在需要某种诊断时调用resolve。扩展答案:
您还可以放置一个自定义回调函数,该函数将只调用promise resolver作为app.listen()
的第三个参数,它应该运行该代码,然后在需要某种诊断时调用resolve
let服务器;
常量app=express();
等待新承诺(功能(解决){
服务器=app.listen(0,“127.0.0.1”,函数(){
log(`Running express server on'${JSON.stringify(server.address())}'…`);
解决();
});
});
this.global.server=服务器;
然后,您可以访问测试文件中的this.global.server
,以获取服务器端口/地址: