Build Status

RxNimble

使 RxSwift 单元测试更轻松的 Nimble 扩展 🎉

如果您来到这里是为了提供帮助,请查看贡献指南

为什么

RxSwift 包含一个非常棒的小型库,名为 RxBlocking,它为查看 Observable 实例提供了便利的功能。Check 是一个阻塞调用,因此得名。

但是编写代码来检查 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 中的 tests target

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 文件夹中的以下内容拖放到您的项目中,可以是其中之一,也可以是两者都拖放

迁移 4.5.0 -> 5.0.0

已弃用的函数 equalFirst 已被删除,以支持更自然的 Nimble matcher 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