0

Я пытаюсь проверить класс Diary, который имеет зависимость от Network.Код модуля тестирования с использованием PromiseKit

Так Diary код:

- (PMKPromise *)saveAndUploadToServer:(DiaryItem *)item 
{ 
    return [self save:item].then(^{ 
     return [self upload:item]; << See UPDATE //I put breakpoint here, it is never called 
    }); 
} 

- (PMKPromise *)save:(DiaryItem *)item 
{ 
    return [PMKPromise new:^(PMKPromiseFulfiller fulfill, PMKPromiseRejecter reject) { 
     [self.entryCreationManagedContext performBlock:^{ 
      BOOL success; 
      NSError *saveError = nil; 

      item.status = @(UploadingStatus); 
      success = [self.entryCreationManagedContext save:&saveError]; 

      if (success) { 
       fulfill(item.objectID); 
      } 
      else { 
       reject(saveError); 
      } 
     }]; 
    }]; 
} 

- (PMKPromise*)upload:(DiaryItem*)item 
{ 
    return [self.network POST:self.diaryUrl parameters:[item dictionary]].then(^{ 
     return [self reportUploadAnalytics]; 
    }); 
} 

И тест:

- (void)testFailedUploadingReportsAnalytics 
{ 
    XCTestExpectation *expectation = [self expectationWithDescription:@"Operations completed"]; 

    [self uploadToServerAndReturnCallback].finally(^{ 
     [expectation fulfill]; 
    }); 

    [self waitForExpectationsWithTimeout:5 handler:^(NSError *error) { 
     assertThat(error, is(nilValue())); 

     //check that mock called 
    }]; 
} 

Network является насмешка в этом тесте. Но то, что я вижу, цепочка обещаний не выполняется. Он застрял. Может быть, потому что then: блок вызывается в основной нити, а XCTest останавливает его. Но в то же время он должен, вероятно, продолжаться через 5 секунд. Что может быть проблемой?

UPDATE

Похоже, ничего с моим оригинальным предположением. Если я заменил [self.entryCreationManagedContext save:&saveError] на YES, тогда отладка достигнет точки останова.

UPDATE 2

Похоже, вопрос с этой конкретной экономии управляемого контекста. Он запускает уведомление о синхронизации других управляемых контекстов. И мы обнаруживаем, что еще там.

ответ

0

В конце концов, в другой проблеме и ничего не связано с PromiseKit.

Мы обнаружили растущее количество использованной памяти. То, что NSManagedObjectContextDidSaveNotification создавало тупик на разных координаторах магазинов. После исправления, что тесты начали работать как ожидалось.

 Смежные вопросы

  • Нет связанных вопросов^_^