単体テストしようとしているシンプルなRxSwift Observableシーケンスがあります。RxSwift Unit Testing
このテストは、subscribeNextブロックが常にヒットしないかのように断続的に失敗します。私が間違っていることに関するアイデアは?
編集1
この認証コールは、単に静的なJSONデータを返すと、実際にネットワークを打つされていません。
単体テストしようとしているシンプルなRxSwift Observableシーケンスがあります。RxSwift Unit Testing
このテストは、subscribeNextブロックが常にヒットしないかのように断続的に失敗します。私が間違っていることに関するアイデアは?
編集1
この認証コールは、単に静的なJSONデータを返すと、実際にネットワークを打つされていません。
あなたの問題は、これら二つの問題のいずれかに最も可能性が高いです。
:あなたが統合テストを行っていない限り、これは、一般的に悪い考えです。ネットワークは信頼性が低く、タイムアウトまたは失敗する可能性があります。あなたのテストでネットワークを打つことがなぜ良い考えでないかについての詳細な情報を見つけることができますhere。非同期テストについて
:何が起こっているが、あなたのアサーションが次のイベントが観測によって送信される前にテストによって実行されていることです。
あなたはこのようなあなたのテストを書き換えることができます:
LETサービス= SomeService()
let expectation = expectationWithDescription("subscribeNext called")
_ = service!.authenticate().subscribeNext { res in
XCTAssert(res.tokenValue == "abc123")
expectation.fulfill()
}
waitForExpectationsWithTimeout(1) { error in
if let error = error {
XCTFail("waitForExpectationsWithTimeout errored: \(error)")
}
}
あなたは、非同期テストhereの詳細情報を見つけることができます。
返信いただきありがとうございます。実際のネットワーク通話がないように模擬データを扱うことに言及するのを忘れていました。私はちょうどそのwaitForExpectationのアプローチを試みたが、時には全くヒットしないように見えます。私は見続けるだろう。再度、感謝します。 – dloomb