Контекст по умолчанию равен нулю при тестировании объектов MagicalRecord с помощью Kiwi.

StackOverflow https://stackoverflow.com//questions/20052992

Вопрос

У меня есть две спецификации, написанные на киви, обе из которых вызывают эти два метода в 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 не был настроен должным образом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top