iOS Kiwi + Nocilla - Сбой при запросе на заглушку
Я только начинаю с запросов-заглушек для проверки асинхронных вызовов внешнего API с iOS. В настоящее время я застрял со следующим кодом, и я не могу понять, что не работает.
Очень простая вещь, которую я пытаюсь достичь, заключается в том, что если я получаю ответ 200 с веб-сайта, я меняю цвет фона моего представления на зеленый, иначе я подкрашиваю его красным.
в - (void)viewDidLoad
метод моего контроллера представления я вызываю следующий метод:
- (void)checkConnectivity {
NSURL *url = [NSURL URLWithString:@"http://www.example.com/"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
if (httpResponse.statusCode == 200) {
dispatch_async(dispatch_get_main_queue(), ^{
self.currentBackgroundColor = [UIColor greenColor];
[self changeToBackgroundColor:self.currentBackgroundColor];
});
} else {
dispatch_async(dispatch_get_main_queue(), ^{
self.currentBackgroundColor = [UIColor redColor];
[self changeToBackgroundColor:self.currentBackgroundColor];
});
}
}];
[task resume];
}
- (void)changeToBackgroundColor:(UIColor *)color {
self.view.backgroundColor = color;
}
Моя спецификация киви выглядит так:
#import "Kiwi.h"
#import "Nocilla.h"
#import "TWRViewController.h"
@interface TWRViewController ()
@property (strong, nonatomic) UIColor *currentBackgroundColor;
- (void)checkConnectivity;
- (void)changeToBackgroundColor:(UIColor *)color;
@end
SPEC_BEGIN(KiwiSpec)
describe(@"When the app launches", ^{
context(@"check if internet is available", ^{
beforeAll(^{
[[LSNocilla sharedInstance] start];
});
afterAll(^{
[[LSNocilla sharedInstance] stop];
});
afterEach(^{
[[LSNocilla sharedInstance] clearStubs];
});
it(@"should display a green background if there is connectivity", ^{
stubRequest(@"GET", @"http://www.example.com/").andReturn(200);
TWRViewController *vc = [[TWRViewController alloc] initWithNibName:@"TWRViewController" bundle:nil];
[vc checkConnectivity];
[[vc.currentBackgroundColor shouldEventually] equal:[UIColor greenColor]];
});
});
});
SPEC_END
Я не знаю, что я делаю неправильно, но это не помогает. Любая идея?
1 ответ
Похоже, ваш асинхронный сопоставитель неполон.
Вам нужно обернуть тему асинхронного сопоставления с помощью allowFutureValue следующим образом:
[[expectFutureValue(vc.currentBackgroundColor) shouldEventually] equal:[UIColor greenColor]];
Для дальнейшего использования, когда вы добавляете асинхронное сопоставление в примитив, такой как BOOL, вам нужно добавить значение к этому, например:
[[expectFutureValue(theValue(myBool) shouldEventually] beYes];
Надеюсь, поможет