2013-06-16 8 views
9

ビューモデルで実行中のRACCommandの結果をテストしようとしています。ビューモデルでRACCommandをテストする

私はそうのようなコマンドを送信する設定

- (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は私が私の見解モデルを初期化するときに呼び出さとvalidSignalは、テストコンテキストで有効です。

私は、Core Data PersistenceにはMagicalRecord、テストにはKiwiを使用しています。私は[[viewModel submitCommand] execute:nil]と呼んで、私のモデルが保存していることをテストする必要があります。

__block NSArray *models = nil; 
[[vm submitSignal] subscribeNext:^(id x) { 
    models = [Model MR_findAll]; 
}]; 

[[vm submitCommand] execute: nil]; 

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

問題は保存が非同期であることですし、テスト終了をブロックしていないし、私のNSManagedObjectContextを切断し、テストが失敗した:

私のテストでは、次のようになります。 私は何をしようとしているのか、まったく間違っていると感じていますが、私はRACCommandを誤解していますが、わかりません。

答えて

6

これは私がばかげていることを示しています。このテストの期待は、次のようになっていたはずです。

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

キウイは今結果を待っているようです。

関連する問題