程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何存根 process.exit 以停止单个测试而不使用 Jest 退出大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何存根 process.exit 以停止单个测试而不使用 jest 退出?

开发过程中遇到如何存根 process.exit 以停止单个测试而不使用 jest 退出的问题如何解决?下面主要结合日常开发的经验,给出你关于如何存根 process.exit 以停止单个测试而不使用 jest 退出的解决方法建议,希望对你解决如何存根 process.exit 以停止单个测试而不使用 jest 退出有所启发或帮助;

关于如何使用 jest 存根 process.exit 已经有很多答案,但没有一个提到如何阻止测试的其余部分执行。例如,如果我正在测试此功能

// display.Js

import { showmessage } from './showmessage';

export function display(messagE) {
  if (!messagE) {
    process.exit(1);
  }

  showmessage(messagE);
}

我可以用 process.exit 存根 jest.spyOn(process,'exit').mockImplementation(() => {}); 但在我的测试中 showmessage 仍然会被调用,而我希望能够断言它不是当输入消息未定义时调用

// display.test.Js

import { display } from './display';
import { showmessage } from './showmessage';

jest.spyOn(process,'exit').mockImplementation(() => {});
jest.mock('./showmessage');

describe('display',() => {
  it('should call showmessage when a valID message is given',() => {
    const msg = 'valID message';
    display(msg);
    expect(showmessagE).toHaveBeenCalleDWith(msg);
  });

  it('should not call showmessage when an invalID message is given',() => {
    display(undefined);
    expect(showmessagE).not.toHaveBeenCalled();
  });
});

就目前而言,第二个测试将失败,即使 display 函数的行为符合我希望它在测试之外的行为。有没有办法为 process.exit 提供模拟实现以模拟 process.exit 如何终止程序,以便在不导致测试运行程序终止的情况下不会调用 showmessage

我还要注意,我曾想过做 jest.spyOn(process,'exit').mockImplementation(() => { throw new Error(); }); 但不幸的是,上面的显示函数是我实际使用的代码的大大简化版本,在实际代码中抛出错误会导致它被 catch 块捕获,所以我正在寻找替代解决方案

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

大佬总结

以上是大佬教程为你收集整理的如何存根 process.exit 以停止单个测试而不使用 Jest 退出全部内容,希望文章能够帮你解决如何存根 process.exit 以停止单个测试而不使用 Jest 退出所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。