使用 axios-mock-adapter 的原因

Bur*_*ULU 1 unit-testing reactjs jestjs axios axios-mock-adapter

我是测试 axios 调用的初学者并开始使用 axios-mock-adapter,但我不明白为什么我们使用 axios-mock-adapter。

mock.onPost('/api').reply(200, userData, headers);
Run Code Online (Sandbox Code Playgroud)

在这个代码片段中,请求是真的发送到服务器还是只是一个模拟?

因为如果我提供错误的凭据,它会以 200 状态响应,因为我在“回复”中识别它以返回 200。

那么如果我确定了响应状态,使用它的原因是什么?如果它真的不去服务器,这似乎是没有用的。

也许我错过了一些我不知道的东西,因为我是新手,但应该有人把这个问题放在我的脑海里。

dub*_*bes 5

回答您的问题

在这个代码片段中,请求是真的发送到服务器还是只是一个模拟?

这只是一个模拟。没有请求,只返回“回复”。这称为模拟并且非常流行并且对于编写测试非常有用。

如果您不熟悉一般不同类型的测试,那么这个答案非常值得一读。

如果它真的不去服务器,这似乎是没有用的。

如果您想作为一个整体来测试系统:即您的网站 + 后端逻辑(如身份验证、数据检索等),那么是的,这是无用的。但是你不会为此使用模拟

集成测试通常针对正在运行的系统执行,它们很有价值,但很难维护并且通常执行速度较慢。您不仅要处理测试,还要处理数据。

你什么时候会使用模拟

模拟对于单元测试你的代码是必不可少的。模拟有助于将前端代码逻辑与动态行为隔离开来。这使您可以更轻松地模拟许多场景,而无需维护数据的开销。

示例场景

用例 在您的应用程序中,您必须针对 REST 端点对用户进行身份验证。预计:

  1. 当用户成功登录时,注销按钮显示在标题中。
  2. 当用户密码过期时,将显示“更改密码”屏幕。
  3. 当用户输入错误的凭据时,会显示警告
  4. 当后端没有响应时,用户会显示一个屏幕,稍后再试

如果没有模拟,您需要确保在身份验证系统中配置了准确的数据。根据经验,我可以告诉你这很难,尤其是 #2 和 #4。

但是对于模拟,您可以只配置模拟以在每个 it()块中/之前为每个场景返回您期望的响应。

这也更容易维护,因为期望(断言/期望语句)设置在测试数据附近(mock.reply())。