Jest 的 `it.each()` 描述用于在引用 $predicate 时呈现箭头函数源代码

2024-01-21

问题定义

Jest 允许测试用例的数据用于it.each's name via $- 前缀变量。

下面的代码产生如下输出:

 PASS  src/array-functions/find-pairwise.spec.ts
  findPairwise
    √ should return [1, 2] for [1, 2, 3] and [Function anonymous] (7ms)
    √ should return [1, 2] for [1, 2, 3] and [Function anonymous] (1ms)
    √ should return [2, 3] for [1, 2, 3] and [Function anonymous]
    √ should return [2, 3] for [1, 2, 3] and [Function anonymous] (1ms)
    √ should return [undefined, undefined] for [1, 2, 3] and [Function anonymous]

Test Suites: 1 passed, 1 total
Tests:       5 passed, 5 total
Snapshots:   0 total
Time:        4.061s
Ran all test suites related to changed files.

如您所见,$expected and $array变量以人类友好的形式呈现(在本例中是基本的 JavaScript 数组)。 但是,那$predicate显示通用文本[Function anonymous]而不是它的实际代码。 我知道 JS 中的常规函数​​和箭头函数都可以暴露它们的源代码,如果你调用.toString()在他们。 有没有办法指示 Jest 渲染结果toString()称呼? 我确实尝试过$predicate.toString() and $(predicate.toString())但他们都没有工作。

Code

import { findPairwise } from './find-pairwise';

describe(findPairwise.name, () => {
  it.each`
    array        | predicate                                | expected
    ${[1, 2, 3]} | ${(l: number, r: number) => l === 1}     | ${[1, 2]}
    ${[1, 2, 3]} | ${(l: number, r: number) => r === 2}     | ${[1, 2]}
    ${[1, 2, 3]} | ${(l: number, r: number) => r === 3}     | ${[2, 3]}
    ${[1, 2, 3]} | ${(l: number, r: number) => l + r === 5} | ${[2, 3]}
    ${[1, 2, 3]} | ${(l: number, r: number) => l === r }    | ${[undefined, undefined]}
  `
  ('should return $expected for $array and $predicate', ({ array, predicate, expected }) => {
//                                         ^^^^^^^^^^
//                                         ||||||||||
//                                         I'd like this to be rendered
//                                         as the code of the arrow function.
//                                         E.g. "(l: number, r: number) => l === 1"
//                                         ...or something close to it.

    expect(findPairwise(array, predicate)).toEqual(expected);
  });
});

当您使用标记模板文字 https://jestjs.io/docs/en/api#2--testeachtablename-fn-timeout-版本为table的参数it.each,笑话正在使用漂亮的格式 https://www.npmjs.com/package/pretty-format后台库从测试数据生成标题(如果测试数据不是原始类型)。

不幸的是,对于您的目的而言,pretty-format图书馆似乎没有使用toString函数中的方法以格式化它们。

作为替代解决方案,您可以使用数组版本 https://jestjs.io/docs/en/api#testeachtablename-fn-timeout为了table范围:

it.each([
    [ [1, 2], [1, 2, 3], (l, r) => l === 1 ],
    [ [1, 2], [1, 2, 3], (l, r) => r === 2 ],
    [ [2, 3], [1, 2, 3], (l, r) => r === 3 ],
    [ [2, 3], [1, 2, 3], (l, r) => l + r === 5 ],
    [ [undefined, undefined], [1, 2, 3], (l, r) => l === r ],
])
('should return %p for %p and %s', (expected, array, predicate) => {
    expect(findPairwise(array, predicate)).toEqual(expected);
});

请注意,我更改了参数的顺序,以便预期值位于第一位。这是因为测试数据和标题中的占位符之间的映射是基于数组版本中的顺序table for it.each.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jest 的 `it.each()` 描述用于在引用 $predicate 时呈现箭头函数源代码 的相关文章

  • 在版本 4.4.6 中禁用 ckeditor 上下文菜单

    我在 Rails4 项目中使用 ckeditor 我尝试了 ckeditor gem 和 ckeditor rails gem 来提供 ckeditor 库 这里有多个帖子 人们希望删除 ckeditor 上下文菜单 以便可以显示本机浏览器
  • 为什么 window 与 Internet Explorer 中的 window.self 不同?

    关于我如何遇到这个问题有一个复杂的背景故事 但为什么self属性不完全等于窗口本身 在 Safari 和 Firefox 及其朋友中 结果如我所料 gt window window self true gt window window se
  • 使用覆盖率信息测试 Go 中的 os.Exit 场景 (coveralls.io/Goveralls)

    这个问题 如何在 Go 中测试 os exit 场景 https stackoverflow com questions 26225513 how to test os exit scenarios in go 以及其中得票最高的答案 列出
  • Number.IsNaN() 比 isNaN() 更糟糕吗

    Soooooo isNaNJavaScript 显然被破坏了 比如 isNaN isNaN isNaN true isNaN false isNaN 0 返回 false 当它们看起来都是 不是数字 在 ECMAScript 6 中 草案包
  • IntersectionObserver是否支持水平滚动观察?

    我制作了几个垂直滚动 IntersectionObserver 模块 但我对水平滚动感兴趣 根将是 div 观察目标将是 img 我想观察当 img 放大但 div 保持视口宽度时的变化 我什至不确定移动 Safari 是否会将缩放后的图片
  • 使用 Retrofit2 和 Mockito 或 Robolectric 进行 Android 单元测试

    我可以测试 Retrofit2beta4 的真实响应吗 我需要 Mockito 或 Robolectic 吗 我的项目中没有活动 它将是一个库 我需要测试服务器是否正确响应 现在我有这样的代码并卡住了 Mock ApiManager api
  • 按下回车键时不刷新页面

    我遇到了一些问题 只要表单中有输入 回车键就会触发页面刷新 下面的代码 如果按下回车并且文本区域 input 中没有输入任何文本 则不会刷新页面 但是如果按下回车并且 input中有输入或者光标位于文本区域 我不确定是什么触发了它 因为 s
  • 计算三次贝塞尔曲线的弧长、曲线长度。为什么不工作?

    我正在用这个算法计算弧长 三次贝塞尔曲线的长度 function getArcLength path var STEPS 1000 gt precision var t 1 STEPS var aX 0 var aY 0 var bX 0
  • 如何使用 Javascript 设置查询字符串

    有没有办法使用 javascript 设置查询字符串的值 我的页面有一个过滤器列表 单击该列表时 它将更改右侧的页内结果窗格 我正在尝试更新 url 的查询字符串值 因此如果用户离开页面 然后单击 后退 按钮 他们将返回到最后一个过滤器选择
  • mongodb 聚合 - 累积字段的不同组值

    如果我有Player表格文件 name String score Int 我有Group文档 其中组代表玩家列表 groupName String players ObjectID 玩家可以属于多个组 我想做一个聚合Player文档 按以下
  • 使用 JavaScript 移动页面上的按钮

    我的按钮可以移动 但奇怪的是 我无法弄清楚偏移是否有问题 我希望我的按钮随着鼠标光标移动 但现在它的移动方式不是我想要的 有时它会消失 另外 创建的新按钮是重叠的 我不知道如何解决这个问题并拥有更好的外观 var coorA var coo
  • 使用 Google 日历源时如何禁用 FullCalendar 中的活动链接?

    我正在使用 FullCalendar 库从 Google 日历加载日历中的事件 不幸的是 事件添加到日历后 它们是可点击的 当您点击该活动时 您会自动重定向到 Google 日历页面以查看该特定活动 或者如果您有足够的访问权限 则可以直接对
  • 使用 Javascript 设置 cookie [重复]

    这个问题在这里已经有答案了 我正在尝试构建我的第一个移动应用程序 它需要连接到我的 mysql 数据库并使用 json 返回数据 这很好 目前我有一个登录系统 一旦确定用户名和密码存在 它就会返回一条成功消息 对于下一步 我想在我的页面上使
  • 如何使用 JavaScript 或 jQuery 克隆 HTML 元素的样式对象?

    我正在尝试克隆元素的样式对象 这应该允许我在更改后重置所述元素的样式 例如 el style left 50px curr style left 50px Modify the elements style The cloned style
  • Google Maps API (v3) 添加/更新标记

    编辑 它现在可以工作 但如果用户不允许或没有基于位置的服务 则不会加载 请参阅 jsfiddle 示例接受的答案评论 我已经浏览了一些教程和问题 但我无法安静地理解正在发生的事情 或者在这种情况下 没有发生 当用户单击链接时 我正在加载地图
  • 如何从浏览器向服务器发送“页面将关闭”消息?

    我想向每个 html 文档添加一个脚本 JavaScript 该脚本向服务器发送两条消息 页面确实打开了 页面将关闭 此消息包含页面打开的时间 打开消息应在文档加载时 或加载完成时 发送 这是简单的部分 The close message
  • 测试弱引用

    在 Java 中测试弱引用的正确方法是什么 我最初的想法是执行以下操作 public class WeakReferenceTest public class Target private String value public Targe
  • Cucumber Java 与 Spring Boot 集成 - Spring @Autowired 抛出 NullPointer 异常

    我正在为 Spring boot 应用程序编写 cucumber java 单元测试来测试每个功能 当我与 Spring Boot 集成时 Autowired 类抛出 NullPointer 异常 Spring Boot应用程序类 Spri
  • 在 iOS 7 Safari 中,如何区分通过边缘滑动与后退/前进按钮的 popstate 事件?

    在 iOS 7 Safari 中 现在有两种后退 前进导航方式 使用底部的传统后退 前进按钮箭头或从屏幕边缘滑动 我正在使用动画在 ajax 应用程序中的页面之间进行转换 但如果用户通过边缘滑动进行导航 我不想触发该转换 因为这本身就是一个
  • 使用打字稿的 Angular 6 的黄金布局?

    我在用黄金布局 https golden layout com 与 Angular 6 一起 如下本教程 https npm taobao org package embedded enterprises ng6 golden layout

随机推荐