Я использую Kiwi для выполнения асинхронного тестирования. Один тест проверяет, что после запрошенного сетевого запроса ответ от сети записывается на диск. Оба запрос сети и запись ответа на диск выполняется на фоне очередях:Как я могу дождаться завершения асинхронных тестов Kiwi или запустить код после их выполнения?
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
[[HZMediationAPIClient sharedClient] GET:@"start" parameters:nil success:^(HZAFHTTPRequestOperation *operation, NSDictionary *json) {
// store JSON to disk
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
[json writeToURL:[[self class] pathToStartInfo] atomically:YES];
});
[self.delegate startWithDictionary:json fromCache:NO];
} failure:^(HZAFHTTPRequestOperation *operation, NSError *error) {
}];
});
я могу проверить такие вещи, как делегат, получающего метод startWithDicationary:fromCache
, используя возможности асинхронного тестирования Киви:
[[expectFutureValue(starterMock) shouldEventually] receive:@selector(startWithDictionary:fromCache:) withArguments:json,theValue(NO)];
Однако я Не уверен, как проверить правильность записи данных на диск. Я могу сделать что-то вроде послать метод делегата, когда после того, как данные записываются на диск, а затем проверить, что это произойдет:
[[expectFutureValue(starterMock) shouldEventually] receive:@selector(wroteDictionaryToCache)];
Но даже если я проверить, что сообщение отправлено, я не могу проверить, что данные фактически записывается на диск.
it(@"Returns the data from network when no cached value, then updates the cache", ^{
// ... test setup here
[[expectFutureValue(starterMock) shouldEventually] receive:@selector(wroteDictionaryToCache)]; // This code finishes immediately
// Code here checking if the data has been written to disk will be executed before the above expectations become true.
});
Есть ли способ, что я могу ждать асинхронных ожиданий годен/не годен, так что я могу затем проверить, что данные записываются на диск? Или я могу приложить блок завершения к ожиданиям, чтобы я мог писать будущие тесты, когда эти ожидания async проходят/терпят неудачу?
Если у вас есть альтернативный подход к тестированию этого, это будет хорошо.