0
我试图从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)
}
}
}
而这里的快速/灵活的单元测试,我试图通过:
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)
以上expect
说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(“某个密码”)'和'loginTaps = Driver.just()'。用这些细节更新问题! –