javascript – 如何向Jest添加自定义消息?

图片跟随测试用例:
it('valid emails checks',() => {
  ['abc@y.com','a@b.nz'/*,...*/].map(mail => {
    expect(isValid(mail)).toBe(true);
  });
});

我想为每封电子邮件添加自动生成的消息,例如电子邮件’f@f.com’应该是有效的,以便很容易找到失败的测试用例.

就像是:

// .map(email =>
expect(isValid(email),`Email ${email} should be valid`).toBe(true);

在Jest中有可能吗?

在Chai中可以使用第二个参数,例如expect(值,’自定义失败消息’).to.be …而在Jasmine中似乎完成了.because子句.但是在Jest中找不到解决方案.

解决方法

我认为不可能提供这样的信息.但是你可以定义自己的 matcher.

例如,您可以创建一个toBeValid(验证器)匹配器:

expect.extend({
  toBeValid(received,validator) {
    if (validator(received)) {
      return {
        message: () => `Email ${received} should NOT be valid`,pass: true
      };
    } else {
      return {
        message: () => `Email ${received} should be valid`,pass: false
      };
    }
  }
});

然后你像这样使用它:

expect(mail).toBeValid(isValid);

注意:toBeValid会为两种情况(成功和失败)返回一条消息,因为它允许您使用.not.测试将失败并显示相应的消息,具体取决于您是否希望它通过验证.

expect(mail).toBeValid(isValid);
// pass === true: Test passes
// pass === false: Failure: Email ... should be valid

expect(mail).not.toBeValid(isValid);
// pass === true: Failure: Email ... should NOT be valid
// pass === false: Test passes

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...