NSSearchPathDirectory.DocumentDirectory returns 伪路径

NSSearchPathDirectory.DocumentDirectory returns bogus path

我一直在尝试对使用 Core Data 的 iOS 项目进行单元测试。我正在使用由 Xcode 生成的常用核心数据堆栈。失败的行如下:

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

在我的 mac 上 returns: file:///Users/juliantejera/Library/Developer/CoreSimulator/Devices/{UNIQUE ID}/data/Containers/Data/Application/{UNIQUE ID}/Documents/

关于特拉维斯:file:///var/empty/Documents/

因此无法创建我的 NSManagedObjectContext,我的应用程序崩溃了。有什么解决办法吗?

一周后,我终于能够通过对 NSPersistentStoreCoordinator 使用 NSInMemoryStoreType 而 运行 单元测试来解决我的问题。

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

在我的例子中,问题是 Kiwi 和 Realm 的组合: 我正在初始化测试规范的 context 块中的一个对象,这反过来又强制初始化一个 Realm DB。不确定到底是什么导致了这种奇怪的行为,但从那时起我就把它作为经验法则来初始化 beforeAll 块中的变量。