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

问题描述

我大多只看到自动化测试中使用的模拟和存根。但我想存根方法来手动测试我的应用程序。通过这种方式,我可以运行我的服务器并在我的浏览器中手动测试我的应用程序,例如,当我按下按钮购买商品时,后端将被存根,以便对 stripe 的调用被对 stripe 的假调用存根。

我想创建一个测试环境来执行此操作。在这个测试环境中,我想存根一些方法,比如对条带的 api 调用。我认为可以通过编写一个脚本来创建这个测试环境,该脚本存根方法,然后在设置存根后从子进程启动应用程序。

但是在将脚本作为子进程启动之前,我在对方法进行存根处理时遇到了问题。当我使用 child_process 启动文件时,存根不起作用。

重新创建:

  1. 转到 this 沙盒
  2. 转到终端并单击 + 按钮以打开非只读终端
  3. 运行node src/runStubbedScript.js

在终端你会得到:

making an http request to Stripe. This may take a while...

但我希望存根能够替换它并给我 skipping call to stripe

如何在启动脚本之前存根方法

代码

index.js

const stripeInterface = require('./stripeInterface');

stripeInterface.charge();

stripeInterface.js

const stripe = {
  charge: () => console.log('making an http request to Stripe. This may take a while...'),};
module.exports = stripe;

runStubbedScript.js
在这里,我尝试存根 Stripe 接口,然后启动 index.js

const { exec } = require('child_process');
const sinon = require('sinon');
const stripe = require('./stripeInterface');

sinon.stub(stripe,'charge').callsFake(() => console.log('skipping call to stripe'));
exec('node index.js',(error,stdout,stderr) => {
  console.log(`stdout: ${stdout}`);
  console.log(`stderr: ${stderr}`);
  if (error !== null) {
    console.log(`exec error: ${error}`);
  }
});

解决方法

我意识到我可以只执行 child_process 而不是执行 require 文件,它会做我想做的事情:

const sinon = require('sinon');
const stripe = require('./stripeInterface');

sinon.stub(stripe,'charge').callsFake(() => console.log('skipping call to stripe'));

require('./index'); // this runs index and the stripe function is stubbed

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...