RxNimble 6.3.1

RxNimble 6.3.1

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布最后发布2023年10月
SPM支持 SPM

Ash FurrowJunior B.RxSwift 社区 维护。



RxNimble 6.3.1

  • RxSwiftCommunity

Build Status

RxNimble

Nimble 扩展,旨在使使用 RxSwift 进行单元测试更加容易🎉

如果您到这里来是想帮忙,请查看 贡献指南

为什么

RxSwift 包含一个名为 RxBlocking 的实用小库,它为 Observable 实例提供了一些便利函数。检查是一个 阻塞调用,因此得名。

但编写检查 Observable 值的代码是非常繁琐的

let result = try! observable.toBlocking().first()
expect(result) == 42

使用 RxNimble,我们为 Observable 添加了 Nimble 扩展,因此上述代码可以重写为:

expect(observable).first == 42

不错。

还可以为阻塞操作符传递超时时间

expect(observable).first(timeout: 3) == 42

此扩展也适用于所有 Traits(例如 SingleMaybe)以及符合 ObservableConvertibleType 的其他类型。


如果您更想使用 RxTest 而不是 RxBlocking,可以通过指定 RxNimble 的 RxTest 子规范来完成。使用 RxTest,您可以进行更强大的测试,检查整个流而不是仅限于 firstlastarray(而最后两个隐式要求流已完成)。

这意味着 RxTest 允许您验证多个 nexterrorcompleted 事件在特定虚拟时间的发生

expect(subject).events(scheduler: scheduler, disposeBag: disposeBag)
    .to(equal([
        Recorded.next(5, "Hello"),
        Recorded.next(10, "World"),
        Recorded.completed(100)
       ]))

您还可以验证特定的错误类型

expect(imageSubject).events(scheduler: scheduler, disposeBag: disposeBag)
    .to(equal([
        Recorded.error(5, ImageError.invalidImage)
       ]))

安装

CocoaPods

在您的 Podfile 中添加到测试目标

pod 'RxNimble' # same as RxNimble/RxBlocking

或者

pod 'RxNimble/RxTest' # installs RxTest instead of RxBlocking

甚至

pod 'RxNimble', subspecs: ['RxBlocking', 'RxTest'] # installs both dependencies

然后执行 pod install 就完成了!

Carthage

添加到您的 Cartfile.private

github 'RxSwiftCommunity/RxNimble'

运行 carthage update --cache-builds,然后从 Carthage/Builds 目录中拖放到您的项目,以下是其中之一或全部:

  • RxNimbleRxBlocking.frameworkRxBlocking.framework
  • RxNimbleRxTest.frameworkRxTest.framework

4.5.0 -> 5.0.0 迁移

不再推荐使用的函数 equalFirst 已被更自然的 Nimble 匹配器 API 风格所取代。

RxNimble 4.5.0

expect(o).to(equalFirst(...))

RxNimble 5.0.0

expect(o).first.to(equal(...))

已知问题

非常非常非常少数情况下,Swift 编译器可能会混淆不同的类型,这时你需要使用原始的 RxBlocking 代码。

许可证

MIT 当然。

Give yourself a high five