2013-06-16 10 views
9

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 ...

Odpowiedz

6

Okazuje się, że jestem głupi. Spodziewam się, że ten test powinien być:

[[expectFutureValue(models) shouldEventually] haveCountOf: 2]; 

Kiwi wydaje się trzymać i czekać na wynik już teraz.

Powiązane problemy