9

我正在尝试测试在我的视图模型上执行的 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 在测试上下文中是有效的。

我使用 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];

问题是 save 是异步的并且不会阻塞,然后测试完成并拆除我的 NSManagedObjectContext 并且测试失败。我觉得我的测试完全错误,或者我正在滥用 RACCommand 但我不知道是哪个......

4

1 回答 1

6

原来这是我愚蠢。我对这个测试的期望应该是:

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

猕猴桃现在似乎坚持并等待结果。

于 2013-06-16T15:27:57.730 回答