如何为Alamofire请求功能编写单元测试?

2024-01-01

我有一个项目,我正在发送 .GET 请求以从服务器获取数据,为此我使用 Alamofire 和 SwiftyJSON。

例如:

我有文件“链接”、“请求”和我的视图控制器。

链接.swift

var getAllData: String {
    return "\(host)api/getalldata"
}

请求.swift

func getAllData(_ completion:@escaping (_ json: JSON?) -> Void) {
    Alamofire.request(Links.sharedInstance.getAllData).validate().responseJSON { (response) in
        do {
            let json = JSON(data: response.data!)
            completion(json)
        }
    }
}

视图控制器

Requests.sharedInstance.getAllData { (json) in
    // ...
}

那么,我该如何为这种情况编写单元测试呢?我现在刚刚学习单元测试,所有书籍中都只有本地案例,没有网络案例的示例。任何人都可以描述我并帮助如何使用 Alamofire 和 SwiftyJSON 编写网络请求的单元测试吗?


Since Requests.sharedInstance.getAllDatacall 是一个网络请求,您需要使用期望方法创建它的实例,以便您可以等待结果Requests.sharedInstance.getAllData我设置了 10 秒超时,否则测试失败。

我们期待常数error to be nil and result to not be nil否则测试也会失败。

import XCTest

class Tests: XCTestCase {

  func testGettingJSON() {
    let ex = expectation(description: "Expecting a JSON data not nil")

    Request.sharedInstance.getAllData { (error, result) in

      XCTAssertNil(error)
      XCTAssertNotNil(result)
      ex.fulfill()

    }

    waitForExpectations(timeout: 10) { (error) in
      if let error = error {
        XCTFail("error: \(error)")
      }
    }
  }

}

您可能希望返回一个错误,以便详细了解请求失败的原因,因此您的单元测试也可以验证此信息。

func getAllData(_ completion: @escaping (_ error: NSError?, _ json: String?) -> Void) {
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为Alamofire请求功能编写单元测试? 的相关文章

  • 如何使用 Vapor 和 Leaf 将图像从浏览器上传到 Amazon S3?

    我已经设置了 AWS S3 存储桶 并且可以使用 Vapor 3 和 Postman 上传文件 PUT request 和标头 x amz acl public read 但我想从浏览器中执行此操作 我使用的是 leaf 那么如何从浏览器上
  • iOS、通用链接、Swift。 continueUserActivity 未调用

    我正在为我们的 iOS 应用程序实现通用链接 这是我的一小部分 AppDelegate private func application application UIApplication openURL url URL sourceApp
  • 无法在 Swift 中对闭包进行弱引用

    Update 我试着不弱化地写一下 好像也没有漏的情况 所以也许这个问题已经没有必要了 在 Objective C ARC 中 当你想让一个闭包能够在闭包内部使用它自己时 该块不能捕获对自身的强引用 否则它将是一个保留循环 因此您可以使闭包
  • (Kiss)XML xpath 和默认命名空间

    我正在开发一个 iPhone 项目 需要解析一些 xml xml 可能包含也可能不包含默认名称空间 我需要知道如何解析 xml 以防它使用默认命名空间 由于我需要读取和写入 xml 因此我倾向于使用 KissXML 但我愿意接受建议 这是我
  • ios swift parse:从 3 个类收集数据

    我有这样的结构 User CardSet 带有指向 User objectId 的指针 user 和 col name 带有点 cards 的卡片到 Card Set objectId 和列 name 我想选择所有卡数据 包括当前用户的卡集
  • 会话重新启动后 AVcapture 会话启动缓慢

    我有一个主视图控制器 它连接到具有 avcapturesession 的第二个视图控制器 我第一次从主视图控制器转向捕获会话控制器 大约需要 50 毫秒 使用 仪器 检查 然后我从捕获会话返回到主视图控制器 然后从主控制器返回到 avcap
  • 调整 UIImage 的大小而不将其完全加载到内存中?

    我正在开发一个应用程序 用户可以在其中尝试加载非常非常大的图像 这些图像首先在表格视图中显示为缩略图 我的原始代码会在大图像上崩溃 因此我重写它以首先将图像直接下载到磁盘 是否有一种已知的方法可以调整磁盘上图像的大小 而无需通过以下方式将其
  • 贴纸包会在模拟器上使 iMessage 崩溃,但在 iPhone 上不会崩溃

    按照 Apple 的在线说明和视频在 Xcode 中创建了一个贴纸包 所有图像的尺寸均正确且远低于文件大小阈值 如果我在我的实体 iPhone 上构建并运行贴纸包 一切都会完美运行 如果我在模拟器上构建并运行贴纸包 对于任何模拟的 iPho
  • 如何在button.addTarget操作中发送多个按钮?斯威夫特3

    如何将button和button2发送到我的pressButton2函数中 当用户触摸按钮2时 我需要更改按钮和按钮2的颜色 当我的 button2 addTarget 看起来像这样时 我收到错误 表达式列表中存在预期表达式 import
  • 访问目标 c 中的类方法。使用 self 还是类名?

    我正在学习 iOS 编程 并且对以下有关关键字 self 的使用的代码感到困惑 据我了解 self就像Java的this 它指的是当前实例 当我想调用类方法时 通常的方式应该是这样 PlayingCard validSuits 但是侵入实例
  • 如何在代码中编辑约束

    我有一个以 100 开始宽度限制的网页 当用户单击按钮时 我想将约束更改为 200 我试过这个 NSLayoutConstraint constrain NSLayoutConstraint constraintWithItem self
  • 在 UIWebView 中播放 Facebook 视频

    有谁知道如何在 Facebook 上播放视频UIWebView 我的应用程序将视频上 传到 Facebook 并检索视频的网址 我想将此网址嵌入到UIWebView播放 我已经为 youtube 解决了这个问题 但没有为 Facebook
  • 在实例化对象之前是否可以检查故事板中是否存在标识符?

    在我的代码中我有这一行 但我想知道是否有办法检查是否 一些控制器 在我将它与 一起使用之前就存在实例化ViewControllerWithIdentifier 方法 如果标识符不存在 则应用程序崩溃 如果没有好的方法 这并不是一个大问题 我
  • 如何获取 vuejs 组件单元测试中定义的“this”变量

    我正在尝试在 npm 脚本中使用 mocha webpack 来测试 vuejs 组件 我在测试中像这样嘲笑 vuex 商店 const vm new Vue template div div
  • Objective-C 中发送给对象的消息可以被监听或者打印出来吗? [复制]

    这个问题在这里已经有答案了 可能的重复 Objective C 中拦截方法调用 https stackoverflow com questions 1618474 intercept method call in objective c 如
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • UIView 圆角 - Swift 2.0?

    我会尝试将一些项目更新到 Swift 2 0 我有一个视图 左上角有一个圆角 在 Swift 没有警告 没有错误 只是没有圆角 这就是它在 Swift let maskPath UIBezierPath roundedRect conten
  • 叠加 SKScene 未显示

    我正在尝试将 SKScene 覆盖在 SCNScene 上 当我在模拟器和 iPhone6 上运行我的应用程序时 overlayScene SKScene 按预期显示 但是当我尝试在 iPhone5 上运行它 尝试了 2 个不同的设备 时
  • iPhone 上的纵向 UISplitViewController 在 iOS 8 中始终显示主视图和细节视图

    UISplitViewController in portrait在 iPhone 上始终显示主控和细节iOS 8 我尝试子类化UISplitViewController并将其配置为同时显示主视图和细节视图 但没有任何效果 class AP
  • 更改 iOS7 中 UIAlertView 的字体大小

    我想更改alertView中消息文本和标题文本的字体大小 苹果网站上没有任何文档谈到这一点 但苹果在其子类注释中表示 UIAlertView 类旨在按原样使用 请参考以下链接 https developer apple com librar

随机推荐

  • 带有主查询数据变量的 MySQL 子查询

    好的 这里需要一位 MySQL 专家 我正在尝试编写一个查询 当有人对您之前评论过的项目发表评论时 该查询将充当通知系统 drinkComment 表非常简单 commentID userID drinkID datetime commen
  • Flex/bison,错误:未声明

    你好 我有一个问题 下面的程序返回一个错误 error Undeclared first use in function 为什么会出现这个错误所有令牌都被声明了 但是这个错误来了 任何人都可以帮助我 这里是 lex 和 yac 文件 谢谢
  • TortoiseHG 和 TortoiseSVN 一起玩得好吗?

    我先安装了TSVN 并使用了很长时间 然后我安装 T HG 当我右键单击时 我没有看到任何 TortoiseHG 有人有同样的问题吗 所有 T SVN 覆盖仍然存在 从版本 0 8 2009 07 01 发布 开始 TortoiseHg 支
  • 在.NET 中连接来自不同源数据库的两个数据表?

    如何在 NET 中连接来自不同源数据库的两个数据表 理想情况下 我可以手动创建两个查询并简单地连接到单个字段 在这种情况下 链接服务器和计划导入不是一个选项 我已经研究了数据关系对象 但是 如果我错了 请纠正我 这只适用于父子关系 我也遇到
  • WinDbg 在 MS 符号服务器上找不到 ntdll 的符号

    我正在尝试调试可执行文件 notepad exe 来自 Windows 10 发行版 并且需要来自 Microsoft 符号服务器的符号 ntdll pdb 但调试器返回错误 指出找不到指定的文件 0 000 gt reload Reloa
  • 我可以在 Schema.org 的一个项目范围中使用多个项目类型吗? [复制]

    这个问题在这里已经有答案了 我想知道是否可以在一个项目范围内使用多个项目类型 例如我现在有这个 div class wrapper p p p p div 当我在 Google 的 Web 开发人员工具中进行结构化数据测试时 它仅选取
  • Trirand jqGrid 未显示;类型错误:$(...).jqGrid 不是函数

    网格不显示 Firefox 控制台显示 类型错误 jqGrid 不是函数 ASP NET MVC 5 2 2 剃刀 jQuery 2 1 1 特兰德 jqGrid 4 6 0 我检查过其他类似的问题 每次问题看起来都不一样 要么是语法问题
  • 通过Spark SQL进行批量数据迁移

    我目前正在尝试通过 Spark SQL 将非常大的 MySQL 表的内容批量迁移到 parquet 文件中 但这样做时 即使将驱动程序的内存限制设置得更高 我在本地模式下使用 Spark 我也会很快耗尽内存 示例代码 Dataset
  • 如何在 Dart 中使用正则表达式?

    在 Flutter 应用程序中 我需要检查字符串是否与特定的正则表达式匹配 但是 我从应用程序的 JavaScript 版本复制的正则表达式always在 Flutter 应用程序中返回 false 我验证了regexr https reg
  • 尾随返回类型语法因 noexcept 说明符而失败?

    此代码按预期工作 void f noexcept 但在 GCC 4 7 2 中 以下操作会失败并出现错误 auto f gt void noexcept error expected initializer before noexcept
  • 在 C++ 中使用 std::bind 和 std::function 时出错[重复]

    这个问题在这里已经有答案了 我尝试在多元函数上尝试牛顿法的片段并使用std bind and std function 但我陷入了一个错误 错误 从 std Bind helper int gt type aka 进行转换 std Bind
  • NetworkOnMainThreadException android 活动[重复]

    这个问题在这里已经有答案了 我正在使用此代码来检索 android 活动中的网站数据 它抛出 android os networkonmainthreadexception try URL url new URL https enigmat
  • jQuery 中的内容文档

    我有以下 js 脚本来访问对象内的元素 SVG jQuery document ready function window load function var a document getElementById alphasvg var s
  • “未设置对象引用”错误

    我收到错误 对象引用未设置到对象的实例 关于下一个方法 private void alSave Click object sender EventArgs e alRecord WriteXml alRecord xml XmlWriteM
  • 当值更改时,获取 QTableWidget 中的 QComboBox 的先前值

    说我有一个QTableWidget每行都有一个QComboBox and a QSpinBox 考虑到我存储它们的值是QMap
  • 从彭博终端抓取新闻源

    我可以访问并开始学习如何使用彭博终端 我当前的项目要求我抓取彭博终端上与给定搜索条件相关的所有新闻标题和内容 例如 NI微软 我已经查看过 Bloomberg API 但它似乎只提供对股票 债券报价等市场数据的访问 而不是新闻文章 我现在很
  • Powershell:命令行参数中的冒号

    需要冒号的 Powershell commandlet 开关参数是怎么回事 考虑 Exchange 2010 管理 shell cmdlet移动ActiveMailbox数据库 http technet microsoft com en u
  • Windows 上的 GitLab 运行程序并处理 &%ERRORLEVEL%

    在我的 gitlab ci yml 中 我尝试使用 findstr 命令 findstr c SOLUTION DIR gitlab dif gt founded ref 如果 gitlab dif 中没有匹配 SOLUTION DIR 此
  • MOQ 错误 预期对模拟调用一次,但实际调用次数为 0 次

    我是最小起订量新手 我已阅读快速入门here https github com Moq moq4 wiki Quickstart 我使用的是最小起订量 v4 2 1402 2112 我正在尝试创建一个单元测试来更新人员对象 这UpdateP
  • 如何为Alamofire请求功能编写单元测试?

    我有一个项目 我正在发送 GET 请求以从服务器获取数据 为此我使用 Alamofire 和 SwiftyJSON 例如 我有文件 链接 请求 和我的视图控制器 链接 swift var getAllData String return h