Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将脚本作为子进程运行之前的存根函数_Javascript_Node.js_Testing_Sinon_Stub - Fatal编程技术网

Javascript 将脚本作为子进程运行之前的存根函数

Javascript 将脚本作为子进程运行之前的存根函数,javascript,node.js,testing,sinon,stub,Javascript,Node.js,Testing,Sinon,Stub,我几乎只见过在自动化测试中使用的模拟和存根。但我想用存根方法手动测试我的应用程序。通过这种方式,我可以在浏览器中运行我的服务器并手动测试我的应用程序。例如,当我按下按钮购买物品时,后端将被存根,因此对stripe的调用将被一个伪stripe调用存根 我想创建一个测试环境来实现这一点。在这个测试环境中,我想要存根一些方法,比如对条带的api调用。我认为可以通过编写一个脚本来创建这个测试环境,该脚本可以存根方法,然后在设置存根后从子进程启动应用程序 但在作为子进程启动脚本之前,我在存根方法方面遇到了

我几乎只见过在自动化测试中使用的模拟和存根。但我想用存根方法手动测试我的应用程序。通过这种方式,我可以在浏览器中运行我的服务器并手动测试我的应用程序。例如,当我按下按钮购买物品时,后端将被存根,因此对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')