0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【備忘録】OHHTTPStubsで非同期テストメモ

Last updated at Posted at 2019-03-16

久々にOHHTTPStubs使おうとしたら色々と忘れていたのでメモ
※ Quick/Nimble使用

beforeEach

beforeEach {
    // hoge.comに対するリクエストであれば、
    // 指定したjsonファイルから生成したstubをレスポンスとして使う
    stub(condition: isHost("hoge.com")) { _ in
        let stubPath = OHPathForFile("items.json", type(of: self))
        return fixture(filePath: stubPath!, headers: ["Content-Type": "application/json"])
    }
}

OHPathForFileはBundle.main.path同様内部的にプロジェクト内のファイルを探索してくれているんだろうか
特に相対パスで指定する必要とかはなかった(一敗)

またHost以外にもHttpMethodだったりPathだったり指定することもできるようだがそのへんはまたおいおい調べる

afterEach

afterEach {
    OHHTTPStubs.removeAllStubs()
}

個々のテストケース完了後も何もしなければstubは残り続けてしまうため、都度掃除してstub同士が干渉しないようにする必要がある

テスト箇所

fetchÎtems()はObservable

context("when request to stub") {
    it("fetch successful.") {
        waitUntil(timeout: 5) { done in 
            let model = Model()
            model.fetchItems().subscribe( onNext: { items in
                expect(items[0].id).to(equal("hoge"))
                done()
            }).disposed(by: self.disposeBag)
        }
    }
}

waitUntil()で明示的に待ってあげないとfetchItems()からeventが流れてくる前にafterEachが発火してしまうため注意が必要(一敗)

まとめ

OHHTTPStubs、API周りのstubを用いたテストが簡潔に記述できて大変良いと思ったので今後も積極的に活用していきたいですね

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?