RxCocoaライブラリからDriver
の単体テストを作成しようとしています。ここに私の簡素化の実装コードです:onNextユニットテストRxCocoaドライバが呼び出されない
struct LoginViewModel {
var username: Driver<String?>!
var password: Driver<String?>!
var loginTaps: Driver<Void>!
func login() -> Driver<LoginResult> {
let credentials = Driver.combineLatest(username, password) { ($0, $1) }
let latestCredentials = loginTaps.withLatestFrom(credentials)
return latestCredentials.flatMapLatest { (username, password) in
.just(.success)
}
}
}
そして、ここで私が通過しようとしてるクイック/軽快なユニットテストです:expect
上記
let disposeBag = DisposeBag()
var capturedLoginResult = LoginResult.failed
loginViewModel.username = Driver.just("some username")
loginViewModel.password = Driver.just("some password")
loginViewModel.loginTaps = Driver.just()
loginViewModel.login().drive(onNext: { loginResult in
capturedLoginResult = loginResult
}).addDisposableTo(disposeBag)
expect(capturedLoginResult == .success)
はcapturedLoginResult
はまだ.failed
であることを述べています。テストではreturn latestCredentials.flatMapLatest { (username, password) in .just(.success) }
の要素が.drive(onNext:)
によって受信されていないように見えます。
はlogin
の実装は、ちょうどの場合:
func login() -> Driver<LoginResult> {
return .just(.success)
}
テストは合格します。
ここで何が起こっているかについてのご意見はありますか?ありがとう!
テストファイルで 'username'、' password'と 'loginTaps'はどのように設定されていますか? – tomahh
@tomahhこれらは 'username = Driver.just(some username") '、' password = Driver.just( "some password") '、' loginTaps = Driver.just() 'と定義されています。これらの詳細を更新しました! –