NSSearchPathDirectory.DocumentDirectory返回伪造路径

时间:2015-04-02 22:59:06

标签: ios core-data travis-ci

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

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/

on travis:file:///var/empty/Documents/

因此无法创建我的NSManagedObjectContext,我的应用程序崩溃了。任何解决方案?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

在我的情况下,问题是Kiwi和Realm的结合: 我正在初始化测试规范的context块中的对象,这反过来又强制Realm DB被初始化。不确定究竟是什么导致这种奇怪的行为,但从那以后我将其作为一个经验法则来初始化beforeAll块中的变量。