KIFでUI操作途中に通信処理を挟む方法
KIFでUI操作するテスト書いていて、UI操作 -> APIを叩く通信処理 -> UI操作っていうテストを書くとうまく通らない事があった。
こんなかんじ
func testHoge() {
tester().tapViewWithAccessibilityLabel("Foo")
let expectation = self.expectationWithDescription("wait for api callback")
SomeApi().getBoo() {
expectation.fulfill()
}
self.waitForExpectationsWithTimeout(3) { (error) -> Void in
XCTAssertNil(error)
}
tester().tapViewWithAccessibilityLabel("Boo")
}
解決策
そんなときはtester().runBlock()
内で実行してあげるとちゃんとAPIもUI操作と同じように動いてくれる
func testHoge() {
tester().tapViewWithAccessibilityLabel("Foo")
tester().runBlock {
let expectation = self.expectationWithDescription("wait for api callback")
SomeApi().getBoo() {
expectation.fulfill()
}
self.waitForExpectationsWithTimeout(3) { (error) -> Void in
XCTAssertNil(error)
}
return KIFTestStepResult.Success
}
tester().tapViewWithAccessibilityLabel("Boo")
}