模拟反应式<UISlider>?



i具有一个视图模型,该视图是其初始器中的输入

init(sliderEvents: Reactive<UISlider>) {

在测试中,我想做

之类的事情
slider.send(.touchDownInside)
slider.send(.valueChanged, 5)
slider.send(.valueChanged, 15)

为VM模拟滑块从值5到15拖动

我尚不清楚RAC是如何建立基础的:Uislider,所以我对如何使Uislider的子类使这种模仿成为可能

感到困惑

您可以将ViewModel设置为具有ObserverActionMutableProperty(任何内容输入(,带有Double类型。然后将UISlider值绑在您的ViewController中。

因此,在您的ViewController中,您可以拥有这样的行: viewModel.sliderValue <~ slider.reactive.mapControlEvents(.valueChanged){ $0.value } sliderValue可能是类型MutableProperty<Double>

在您的测试中,您可以设置这样的值:viewModelToTest.sliderValue.value = 10

这是另一种应起作用的方法:

protocol SliderProtocol {
    var valuesSignal: Signal<Float, NoError> { get }
}
extension UISlider: SliderProtocol {
    var valuesSignal: Signal<Float, NoError> {
        return reactive.values
    }
}
extension Reactive where Base: SliderProtocol {
    var values: Signal<Float, NoError> {
        return base.valuesSignal
    }
}
class MockSlider: SliderProtocol {
    let mockValue = MutableProperty<Float>(0)
    var valuesSignal: Signal<Float, NoError> {
        return mockValue.signal
    }
}

您的ViewModel应该使用Reactive<SliderProtocol>进行初始化,您可以将MockSlider实例传递给它。模拟与设置mockSlider.mockValue.value = 10一样简单。

相关内容

  • 没有找到相关文章

最新更新