NSManagedObjects 属性在 Quick-Nimble 中始终为 nil
NSManagedObjects properties always nil with Quick-Nimble
过去,我通过在内存中设置托管对象上下文来测试 XCTests 中的 CoreData 层,如 this post 中所述。基本上:
class func setUpInMemoryManagedObjectContext() -> NSManagedObjectContext {
let managedObjectModel = NSManagedObjectModel.mergedModel(from: [Bundle.main])!
let persistentStoreCoordinator = NSPersistentStoreCoordinator(managedObjectModel: managedObjectModel)
do {
try persistentStoreCoordinator.addPersistentStore(ofType: NSInMemoryStoreType, configurationName: nil, at: nil, options: nil)
} catch {
print("Adding in-memory persistent store failed")
}
let managedObjectContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
managedObjectContext.persistentStoreCoordinator = persistentStoreCoordinator
return managedObjectContext
}
最近我一直在使用具有相同设置的 Quick/Nimble 并且在 expect
语句中它总是将我的 NSManagedObject 的属性读取为 nil,即使它们在我调试时具有值测试。例如,其中 savedItem
是一个 NSManagedObject 实例,当我将其 属性 存储在一个变量中时,它将传递:
let name = savedItem.name
it("should have a name") {
expect(name).to(equal(item.name))
}
但如果我直接测试 savedItem.name
:
it("should have a name") {
expect(savedItem.name).to(equal(item.name))
}
测试失败并显示消息:expected ... got <nil>
如何使用 Quick/Nimble 直接测试我的 CoreData 对象?
我遇到的奇怪行为似乎与我在 context
闭包内直接 初始化我的 NSManagedObject
有关,但在此之前it
闭包。当我在 beforeEach
闭包(在 context
内部)中初始化它时,它的行为符合预期。
过去,我通过在内存中设置托管对象上下文来测试 XCTests 中的 CoreData 层,如 this post 中所述。基本上:
class func setUpInMemoryManagedObjectContext() -> NSManagedObjectContext {
let managedObjectModel = NSManagedObjectModel.mergedModel(from: [Bundle.main])!
let persistentStoreCoordinator = NSPersistentStoreCoordinator(managedObjectModel: managedObjectModel)
do {
try persistentStoreCoordinator.addPersistentStore(ofType: NSInMemoryStoreType, configurationName: nil, at: nil, options: nil)
} catch {
print("Adding in-memory persistent store failed")
}
let managedObjectContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
managedObjectContext.persistentStoreCoordinator = persistentStoreCoordinator
return managedObjectContext
}
最近我一直在使用具有相同设置的 Quick/Nimble 并且在 expect
语句中它总是将我的 NSManagedObject 的属性读取为 nil,即使它们在我调试时具有值测试。例如,其中 savedItem
是一个 NSManagedObject 实例,当我将其 属性 存储在一个变量中时,它将传递:
let name = savedItem.name
it("should have a name") {
expect(name).to(equal(item.name))
}
但如果我直接测试 savedItem.name
:
it("should have a name") {
expect(savedItem.name).to(equal(item.name))
}
测试失败并显示消息:expected ... got <nil>
如何使用 Quick/Nimble 直接测试我的 CoreData 对象?
我遇到的奇怪行为似乎与我在 context
闭包内直接 初始化我的 NSManagedObject
有关,但在此之前it
闭包。当我在 beforeEach
闭包(在 context
内部)中初始化它时,它的行为符合预期。