2015-04-02 74 views
1

我一直試圖單元測試使用核心數據的iOS項目。我使用通常由Xcode生成的Core Data堆棧。該線失敗如下:NSSearchPathDirectory.DocumentDirectory返回僞造路徑

lazy var applicationDocumentsDirectory: NSURL = { 
    let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask) 
    return urls[urls.count-1] as NSURL 
}() 

在我的Mac它返回:file:///Users/juliantejera/Library/Developer/CoreSimulator/Devices/{UNIQUE ID}/data/Containers/Data/Application/{UNIQUE ID}/Documents/

在特拉維斯:file:///var/empty/Documents/

因此我的NSManagedObjectContext不能創建和我的應用程序崩潰。任何解決方案

回答

0

經過一個星期,我終於能夠通過在運行單元測試時使用NSPersistentStoreCoordinator的NSInMemoryStoreType來解決我的問題。

var isRunningUnitTests = NSClassFromString("XCTest") != nil 
var storeType = isRunningUnitTests ? NSInMemoryStoreType : NSSQLiteStoreType 
0

在我的情況下的問題是獼猴桃和境界的組合: 我在測試規範,這又迫使境界DB進行初始化的context塊初始化的對象。不知道究竟是什麼導致了這個怪異的行爲,但從那時起,我將其作爲經驗法則來初始化beforeAll塊中的變量。