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

Stub functions before running script as child process

我大多只见过自动化测试中使用的模拟和存根。但我想存根用于手动测试我的应用程序的方法。这样我就可以 运行 我的服务器并在我的浏览器中手动测试我的应用程序,例如,当我按下按钮购买商品时,后端将被打断,以便对 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}`);
  }
});

我意识到我可以 require 文件而不是执行 child_process,它会执行我想要的操作:

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