使用PromiseKit使用单元测试代码

时间:2015-01-13 11:07:50

标签: ios unit-testing asynchronous promisekit xctestexpectation

我正在尝试测试依赖于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

看起来这个特定的托管上下文保存问题。它触发有关同步其他托管上下文的通知。我们正在发现还有什么。

1 个答案:

答案 0 :(得分:0)

它最终出现在不同的问题上,没有任何与PromiseKit相关的信息。

我们发现了越来越多的旧内存。那个NSManagedObjectContextDidSaveNotification在不同的商店协调员身上产生了僵局。修复后,测试开始按预期工作。

相关问题