2016-12-14 11 views
6

waitForExpectations APIを使用して非同期関数をテストする必要があるUIテストを実行しています。私が正しく期待を作成したとして、waitForExpectationsを使用するとAPI違反が発生する

"NSInternalInconsistencyException", "API violation - call made to wait without any expectations having been set."

私は本当に理解していない:

が、私はこのエラーを取得しています。

さらに、ドキュメンテーションのバグがあるようです。ドキュメントによれば、APIはexpectation(description:)ですが、コンパイラはそれを受け入れず、代わりにXCTestExpectation()を使用して作成する必要があります。

func testExample() { 
    XCTAssertTrue(state == .STATE_NOT_READY) 
    let exp1 = XCTestExpectation() 

    let queue = DispatchQueue(label: "net.tech4freedom.AppTest") 
    let delay: DispatchTimeInterval = .seconds((2)) 
    queue.asyncAfter(deadline: .now() + delay) { 
     XCTAssertTrue(true) 
     exp1.fulfill() 
    } 

    self.waitForExpectations(timeout: 4){ [weak self] error in 
     print("X: async expectation") 
     XCTAssertTrue(true) 
    } 
    self.waitForExpectations(timeout: 10.0, handler: nil) 
} 
+0

あなたは' self.expectation(説明)を使用するときは、どのようなエラーを取得します:ドキュメントは明らかにこれは、あなたがこのような期待を作成する必要があることを、意味

Use the following XCTestCase methods to create XCTestExpectation instances:
- expectation(description:)

を言うの?これはこれを行う正しい方法であるため、そうでなければ、テストクラスはあなたの期待を作成したことを知りません。 – Losiowaty

+0

説明パラメータ(let exp1 = XCTestExpectation(description: "ss2"))を使用してexpectationを作成しようとすると、引数を取らないように引数を渡します。 – onthemoon

答えて

8

あなたが間違っているのは、あなたが間違いなく直接期待をインスタンス化しようとしていることです。 `:

func testMethod() { 
    let exp = self.expectation(description: "myExpectation") 
    // your test code 
} 
+1

API waitを呼び出すこともできます:[XCTestExpectation]、timeout seconds:TimeInterval) 'テストスタブクラスからのものであれば期待通りに渡します。 –

関連する問題