Próbuję przetestować wynik komendy RACCommand wykonującej w moim modelu widoku.Testowanie komendy RAC na widoku modelu
ustawić złożenia polecenia moje się tak:
- (void) createSubmitCommand
{
@weakify(self);
self.submitCommand = [RACCommand commandWithCanExecuteSignal: [self validSignal]];
self.submitSignal = [self.submitCommand
addSignalBlock:^RACSignal *(id value) {
@strongify(self);
return [self save];
}];
}
- (RACSignal *) save
{
RACSubject *saveSubject = [RACSubject subject];
[self.model.managedObjectContext MR_saveOnlySelfWithCompletion:^(BOOL success, NSError *error) {
if (!success)
{
[saveSubject sendError: error];
}
else
{
[saveSubject sendNext: nil];
[saveSubject sendCompleted];
}
}];
return saveSubject;
}
createSubmitCommand nazywa kiedy init, moim zdaniem model i validSignal jest ważna w kontekście testu.
Używam MagicalRecord do sprawdzania danych podstawowych i Kiwi do testowania. Muszę przetestować to, gdy wywołuję [[viewModel submitCommand] wykonaj: nil], że mój model zapisuje.
Mój test wygląda mniej więcej tak:
__block NSArray *models = nil;
[[vm submitSignal] subscribeNext:^(id x) {
models = [Model MR_findAll];
}];
[[vm submitCommand] execute: nil];
[[expectFutureValue(models) should] haveCountOf: 2];
Problem jest, że save jest asynchroniczny i nie blokuje wtedy wykończenia testowych i łzy w dół mojego NSManagedObjectContext a test nie powiedzie się. Czuję, że test jest całkowicie błędny z powodu tego, co próbuję zrobić lub niewłaściwie używam polecenia RACCommand, ale nie wiem, który ...