-1

我正在尝试为我的应用程序编写一些使用 rxSwift 的测试。特别是,我想测试,编写单元测试,webview。我正在使用 RxWebKit 来获取一些属性的 observables,比如 navigationCompleted 或 NavigationFailed 等等。例如:webView.rx.didFailNavigation.asDriver()。这些 observables 作为我的 viewModel 的输入。但是我不确定如何编写这些测试来模拟例如失败的导航以及这种可观察的发射。在特定情况下,我想模拟 a Driver<(webView: WKWebView, navigation: WKNavigation, error: Error)>(与关联的类型相同webView.rx.didFailNavigation.asDriver())。我知道要模拟发射,我需要创建一个调度程序并调用该createHotObservable方法,但是在特定情况下我要传递什么Recorderd.next(150, element)作为元素来模拟 webview 的失败?有人可以给我一个简单的例子吗?

4

1 回答 1

0

这个问题有点笼统,所以我给出一个更笼统的答案:

您需要使用 RxSwift 进行测试,或者使用:

  1. RxTest:https ://github.com/ReactiveX/RxSwift/blob/master/Documentation/UnitTests.md

例如:

func testElementsEmitted() {
    let scheduler = TestScheduler(initialClock: 0)

    let xs = scheduler.createHotObservable([
        .next(210, "RxSwift"),
        .next(220, "is"),
        .next(230, "pretty"),
        .next(240, "awesome")
    ])

    let res = scheduler.start { xs.asObservable() }

    XCTAssertRecordedElements(res.events, ["RxSwift", "is", "pretty", "awesome"])
}
  1. 或者您可以使用 RxBlocking:https ://github.com/ReactiveX/RxSwift/tree/master/RxBlocking

例如,这是一个很好的起点:

http://rx-marin.com/post/rxblocking-part1/

于 2020-07-21T15:40:15.087 回答