我正在尝试测试依赖于Diary
的{{1}}类。
所以Network
代码:
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:
正在暂停它。但与此同时它可能会在5秒后继续。可能是什么问题?
更新
看起来我的原始假设没什么。如果我用XCTest
替换[self.entryCreationManagedContext save:&saveError]
,则调试到达断点。
更新2
看起来这个特定的托管上下文保存问题。它触发有关同步其他托管上下文的通知。我们正在发现还有什么。
答案 0 :(得分:0)
它最终出现在不同的问题上,没有任何与PromiseKit相关的信息。
我们发现了越来越多的旧内存。那个NSManagedObjectContextDidSaveNotification
在不同的商店协调员身上产生了僵局。修复后,测试开始按预期工作。