问题描述
我大多只看到自动化测试中使用的模拟和存根。但我想存根方法来手动测试我的应用程序。通过这种方式,我可以运行我的服务器并在我的浏览器中手动测试我的应用程序,例如,当我按下按钮购买商品时,后端将被存根,以便对 stripe 的调用被对 stripe 的假调用存根。
我想创建一个测试环境来执行此操作。在这个测试环境中,我想存根一些方法,比如对条带的 api 调用。我认为可以通过编写一个脚本来创建这个测试环境,该脚本存根方法,然后在设置存根后从子进程启动应用程序。
但是在将脚本作为子进程启动之前,我在对方法进行存根处理时遇到了问题。当我使用 child_process
启动文件时,存根不起作用。
重新创建:
在终端你会得到:
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