解决 Jest Test 跳过不可序列化的错误

阅读时长 3 分钟读完

前言

Jest 是一个强大且易用的 JavaScript 测试框架。然而,当我们在测试时遇到了 “skip not serializable” 的报错信息时,很可能会让我们感到困惑。 本篇文章将会详细的介绍这个问题的发生原因,如何避免,以及如何解决这个问题。

症状

当我们执行 Jest 测试时,可能会出现以下错误:

错误信息通常会提示你某个测试被跳过了,这是因为测试中存在一些不可序列化的值。

原因

在 Jest 的默认配置下,它使用了一个叫做 expect.serialize 的方法来比较预期值和实际值。这个方法需要将被比较的值序列化为字符串,以便进行比较。如果被比较的值中存在不可序列化的值,比如函数或 DOM 节点,就会发生上述错误。

解决方法

1. 不要使用 skip 方法

当测试中包含了不可序列化的值时,我们可以通过避免使用 test.skip()it.skip() 方法来避免这个问题。这是因为 Jest 在尝试序列化被跳过的测试时才会抛出这个异常。

例如,我们可以把 skip 方法改为 todo 方法,这样测试就会被标记为待做的测试,但不会有任何的序列化问题。

2. 去除不可序列化的值

以上方法并不能解决所有的问题,因为有些值可能是必须的,例如一个被测试的组件,它需要包含 DOM 节点。这时我们可以去除不可序列化的值,比如函数或 DOM 节点,只留下可序列化的值。

这种方法可能需要花费一些时间和精力分析要序列化的值,以及确定哪些值是必须的。

3. 自定义序列化方法

Jest 集成了一个自定义序列化方法的接口,我们可以利用这个接口来修改默认的序列化方法,将不可序列化的值转换成可序列化的值。这个方法可以在 Jest 的配置文件中设置。

-- -------------------- ---- -------
------------------------
-------------- - -
  ----------- -
    -- ----------
    ------ ----- ---------- -----------
  --
  ---------------- -
    -- -----------
    ------ ---------------------- ---
  --
-

自定义的序列化方法中包含两个函数:testserializetest 函数会判断当前的值是否需要修改序列化方法,如果不需要,直接返回 false。serialize 函数会返回一个修改后的序列化字符串。

通过自定义序列化方法,我们可以将不可序列化的值转换成可序列化的值,从而避免了这个问题。

结论

当一个测试包含不可序列化的值时,Jest 会跳过这个测试,并抛出 “skip not serializable” 的错误信息。解决这个问题的方法包括避免使用 skip 方法,移除不可序列化的值或者自定义序列化方法。通过这篇文章的介绍和示例代码,相信读者已经可以更好地理解这个问题,并学会如何解决它。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66fbe7dc4471362601664fc8

纠错
反馈