Javascript 将脚本作为子进程运行之前的存根函数
我几乎只见过在自动化测试中使用的模拟和存根。但我想用存根方法手动测试我的应用程序。通过这种方式,我可以在浏览器中运行我的服务器并手动测试我的应用程序。例如,当我按下按钮购买物品时,后端将被存根,因此对stripe的调用将被一个伪stripe调用存根 我想创建一个测试环境来实现这一点。在这个测试环境中,我想要存根一些方法,比如对条带的api调用。我认为可以通过编写一个脚本来创建这个测试环境,该脚本可以存根方法,然后在设置存根后从子进程启动应用程序 但在作为子进程启动脚本之前,我在存根方法方面遇到了问题。当我使用Javascript 将脚本作为子进程运行之前的存根函数,javascript,node.js,testing,sinon,stub,Javascript,Node.js,Testing,Sinon,Stub,我几乎只见过在自动化测试中使用的模拟和存根。但我想用存根方法手动测试我的应用程序。通过这种方式,我可以在浏览器中运行我的服务器并手动测试我的应用程序。例如,当我按下按钮购买物品时,后端将被存根,因此对stripe的调用将被一个伪stripe调用存根 我想创建一个测试环境来实现这一点。在这个测试环境中,我想要存根一些方法,比如对条带的api调用。我认为可以通过编写一个脚本来创建这个测试环境,该脚本可以存根方法,然后在设置存根后从子进程启动应用程序 但在作为子进程启动脚本之前,我在存根方法方面遇到了
子进程启动文件时,存根不起作用
要重新创建:
去沙箱
转到终端并单击+按钮以打开非只读终端
运行节点src/runStubbedScript.js
在终端中,您将获得:
对条带进行http请求。这可能需要一段时间…
但是我希望存根替换它,并给我跳过对stripe的调用
如何在启动脚本之前存根方法?
代码
index.js
:
const stripeInterface=require('./stripeInterface');
stripeInterface.charge();
stripeInterface.js
:
const stripe={
charge:()=>console.log('向条带发送http请求。这可能需要一段时间…),
};
module.exports=条带;
runStubbedScript.js
在这里,我尝试存根条带接口,然后启动index.js
:
const{exec}=require('child_进程');
const sinon=要求(“sinon”);
常量stripe=require('./stripeInterface');
sinon.stub(stripe,'charge').callsFake(()=>console.log('skippingcalltostripe'));
exec('node index.js',(错误,标准输出,标准输出)=>{
log(`stdout:${stdout}`);
log(`stderr:${stderr}`);
如果(错误!==null){
log(`exec error:${error}`);
}
});
我没有执行子进程
而是意识到我可以只需要文件,它可以做我想做的事情:
const sinon=require('sinon');
常量stripe=require('./stripeInterface');
sinon.stub(stripe,'charge').callsFake(()=>console.log('skippingcalltostripe'));
需要('./索引');//这将运行索引,并且stripe函数是存根的
请注意:Sinon在存根函数时并没有真正发挥“魔力”。它实际上只是覆盖一个属性。因此,如果您不想要Sinon的任何验证功能,只需自己更换道具即可;代码更少,更容易理解:stripe.charge=()=>console.log('skippingcalltostripe')
。