【发布时间】:2015-03-27 04:47:59
【问题描述】:
我正在用 Swift 编写我的第一个集成测试。
我正在尝试检查特定网址中是否存在图像。
我想执行一个头部请求并检查响应的状态码。
我不断收到错误:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'API violation - multiple calls made to -[XCTestExpectation fulfill].
我尝试将期望设为弱变量。
我有以下代码/测试:
func testAndroidImagesExist() {
weak var expectation: XCTestExpectation?
expectation = expectationForNotification(kBaoNotification_ManifestImportCompleted, object: nil) { (notification: NSNotification!) -> Bool in
let userInfo: NSDictionary = notification.userInfo!
var titles = userInfo.valueForKey("titles") as? NSArray
titles?.enumerateObjectsUsingBlock({ (t: AnyObject!, idx: Int, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
let title = t as NSDictionary
let titleLabel = title.valueForKey("title") as String
let parameters = title.valueForKey("parameters") as NSDictionary
let androidImageUrl = parameters.valueForKey("android_logo_url") as String
var androidRequest = NSMutableURLRequest(URL: NSURL(string: androidImageUrl)!)
androidRequest.HTTPMethod = "HEAD"
var androidResponse: NSURLResponse?
var androidData = NSURLConnection.sendSynchronousRequest(androidRequest, returningResponse: &androidResponse, error: nil)
var androidHttpResponse = androidResponse as? NSHTTPURLResponse
if androidHttpResponse != nil {
if androidHttpResponse!.statusCode == 404 {
XCTFail("Android image not found for title \(titleLabel)")
}
} else {
XCTFail("No response from android image for title \(titleLabel)")
}
})
expectation?.fulfill()
return true
}
waitForExpectationsWithTimeout(10, handler: { (error: NSError!) -> Void in
if (error != nil) {
XCTFail("Timeout error: \(error)")
}
})
}
有什么想法吗?
【问题讨论】:
-
您找到解决方案了吗?我的集成测试在本地运行,但是当我尝试在构建服务器上运行它们时出现此错误。
-
我无法理解如何执行一次甚至调用一次。您正在创建一个expectationForNotification,但是在您的代码中的哪个位置生成了预期的通知?