Контекст по умолчанию равен нулю при тестировании объектов MagicalRecord с помощью Kiwi.
-
27-12-2019 - |
Вопрос
У меня есть две спецификации, написанные на киви, обе из которых вызывают эти два метода в beforeAll
:
[MagicalRecord setDefaultModelFromClass:[self class]];
[MagicalRecord setupCoreDataStackWithInMemoryStore];
И [MagicalRecord cleanUp];
в afterAll
.
Одна из этих спецификаций не говорит Default Context is nil! Did you forget to initialize the Core Data Stack?
а другой нет.Когда я комментирую первую спецификацию, вторая все равно терпит неудачу.Когда я комментирую вторую спецификацию, первая все равно проходит, поэтому кажется, что порядок не имеет значения или они выполняются параллельно и вызывают проблему.
Может ли кто-нибудь пролить свет на то, почему это может происходить?Вот полная спецификация, которая не работает:
#import "Kiwi.h"
#import "AuthenticationHelper.h"
#import "Admin.h"
SPEC_BEGIN(AuthenticationManagerSpec)
describe(@"The authentication helper", ^{
beforeAll(^{
[MagicalRecord setDefaultModelFromClass:[self class]];
[MagicalRecord setupCoreDataStackWithInMemoryStore];
});
afterAll(^{
[MagicalRecord cleanUp];
});
context(@"when given correct credentials", ^{
context(@"should pass", ^{
NSString *email = @"foo@bar.com";
NSString *password = @"test_password_1234";
Admin *admin = [Admin createEntity];
admin.email = email;
admin.password = password;
__block BOOL loggedInSuccessfully = NO;
[AuthenticationHelper authenticateUserWithEmail:email
password:password
completion:^(BOOL success,
id response) {
loggedInSuccessfully = success;
}];
[admin deleteEntity];
[[expectFutureValue(theValue(loggedInSuccessfully)) shouldEventually] beTrue];
});
});
});
SPEC_END
Это терпит неудачу в + (NSManagedObjectContext *) MR_defaultContext
с высказыванием NSAssert Default Context is nil! Did you forget to initialize the Core Data Stack?
.
Решение
Глупая ошибка!Эта строка:
context(@"should pass", ^{
должно было быть это:
it(@"should pass", ^{
Это вызывало beforeAll
блок не запускался, поэтому стек Core Data не был настроен должным образом.