模拟 Reactive<UISlider>?
Mock a Reactive<UISlider>?
我有一个 ViewModel,它在其初始化程序中有一个输入
init(sliderEvents: Reactive<UISlider>) {
在测试中我想做类似
的事情
slider.send(.touchDownInside)
slider.send(.valueChanged, 5)
slider.send(.valueChanged, 15)
例如,为了模拟滑块从值 5 拖动到 15 的 VM
我不清楚 RAC 是如何构建 Base: UISlider 的,所以我对如何创建 UISlider 的子类来使这种模拟成为可能感到困惑
您可以将 ViewModel 设置为具有 Double
类型的 Observer
、Action
或 MutableProperty
(任何接受输入的内容)。然后将 UISlider
值绑定到 ViewController.
中的值
所以在你的 ViewController 中你可以有这样一行: viewModel.sliderValue <~ slider.reactive.mapControlEvents(.valueChanged){ [=15=].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
.
一样简单
我有一个 ViewModel,它在其初始化程序中有一个输入
init(sliderEvents: Reactive<UISlider>) {
在测试中我想做类似
的事情slider.send(.touchDownInside)
slider.send(.valueChanged, 5)
slider.send(.valueChanged, 15)
例如,为了模拟滑块从值 5 拖动到 15 的 VM
我不清楚 RAC 是如何构建 Base: UISlider 的,所以我对如何创建 UISlider 的子类来使这种模拟成为可能感到困惑
您可以将 ViewModel 设置为具有 Double
类型的 Observer
、Action
或 MutableProperty
(任何接受输入的内容)。然后将 UISlider
值绑定到 ViewController.
所以在你的 ViewController 中你可以有这样一行: viewModel.sliderValue <~ slider.reactive.mapControlEvents(.valueChanged){ [=15=].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
.