gpt4 book ai didi

javascript - 我应该对对 $.ajax 的调用进行单元测试还是对已发送的 XHR 进行单元测试?

转载 作者:行者123 更新时间:2023-11-30 07:39:05 26 4
gpt4 key购买 nike

假设我有以下方法:

function sendUserDataToServer(userData) {
// Do some configuration stuff
$.ajax('SomeEndpoint', userData);
}

在为此功能编写单元测试时,我可以采用以下两种方式之一:

  1. 围绕 $.ajax 创建一个 spy 程序并检查它是否使用预期的参数调用。不会发送实际的 XHR 请求。
  2. 使用 SinonJs 等库拦截 ajax 请求并检查 XHR 对象以确保其配置正确。

为什么我会选择选项 1:它将 $.ajax 的功能与我的代码分开。如果 $.ajax 由于 jQuery 中的错误而中断,它不会在我的单元测试结果中产生假阴性。

为什么我会选择选项 2:如果我决定使用 jQuery 之外的另一个库来发送 XHR,我将不必更改我的单元测试来检查不同的方法。但是,如果该库中存在错误,我的单元测试将失败,我不一定会立即知道它是库而不是我的实际代码。

哪种方法是正确的?

最佳答案

您的第一个选项是正确的。单元测试的目的是双重的

  • 验证你的代码合约
  • 验证它是否与它使用的其他东西通信。

您的问题是关于与 $.ajax 的交互,因此此测试的目的是确认它可以与其合作者正确对话。

如果您选择选项 1,这正是您正在做的。如果您选择选项 2,那么您正在测试第三方库,而不是您正在正确执行通信协议(protocol)。

不过,您应该同时进行这两项测试。第二个测试可能足够快,可以与您的单元测试一起使用,即使有些人可能将其称为集成测试。此测试告诉您您正在正确使用库来创建您打算创建的对象。两者都可以让您区分代码中的错误和库中的错误,如果存在导致系统中其他部分失败的库错误,这将派上用场。

关于javascript - 我应该对对 $.ajax 的调用进行单元测试还是对已发送的 XHR 进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22077555/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com