1

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

mock.onPost('/api').reply(200, userData, headers);

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

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

那么如果我识别响应状态,使用它的原因是什么?如果它没有真正进入服务器,那么这似乎是无用的。

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

4

1 回答 1

6

回答您的问题

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

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

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

如果它没有真正进入服务器,那么这似乎是无用的。

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

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

你什么时候使用模拟

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

示例场景

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

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

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

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

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

于 2017-10-06T08:03:53.910 回答