在 Jest 中如何模拟 Axios

阅读时长 5 分钟读完

引言

Axios 是前端常用的 HTTP 请求库之一。在编写前端单元测试时,我们经常需要模拟 Axios,在不访问真正的服务器的情况下测试我们的代码。这篇文章将介绍如何在 Jest 中模拟 Axios,让我们可以轻松地编写单元测试。

通过 Jest Mock 模拟 Axios

在 Jest 中,我们可以通过 jest.mock 函数来创建一个模拟的 Axios 模块。在下面的示例中,我们将创建一个返回 Promise 解决值的 axios.get 方法。

在这个模拟中,我们将 axios.get 替换为一个 Jest 函数模拟。这个模拟函数返回一个 Promise,该 Promise 解决为一个对象,其中有一个 data 属性,其值为 'mocked data'

要在测试中使用此模拟,我们只需像平常一样引用 axios,并确保模拟已被正确应用:

如果我们的代码中使用了其他 Axios 方法,就可以用类似的方式模拟这些方法。例如,为了模拟 axios.post 方法:

通过 Jest 实例模拟 Axios

除了使用 jest.mock 函数来模拟 Axios 外,我们还可以使用 Jest 所提供的 Mock 实例的方式来模拟。在下面的示例中,我们将创建一个 Axios 的 Mock 实例,并编写测试代码:

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

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

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

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

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

在这个示例中,我们首先从 Axios 模块中生成了一个 Jest Mock 实例。然后我们创建了一个 create 方法的 Jest Mock 实例,该方法返回我们的 Mock 实例本身。最后,我们为 get 方法编写了一个 Jest Mock 函数,该函数的解决值是一个对象,其中有一个 data 属性,其值为 'mocked data'

最终,在测试中,我们只需像平常一样使用我们的 Mock 实例,并确保模拟已被正确应用。

总结

在 Jest 中模拟 Axios 可以帮助我们编写没有副作用的单元测试。我们可以使用 jest.mock 函数或 Jest Mock 实例来模拟 Axios,并在测试中使用模拟函数来代替实际的 Axios 方法。这样,我们就可以避免访问真正的服务器,并且确保我们的测试代码可以独立地运行和验证。

示例代码:

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

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

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

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

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

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

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

纠错
反馈