Свифт, как заглушить функцию с помощью кукушки - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь написать тест для простого класса, однако кукушка не распознает одну из моих заглушек с закрытием.Есть ли способ заглушки функции с замыканием.

Функция-заглушка не вызывается, когда я делаю po на интеракторе или делегате, я вижу, что тесты ссылаются наФактический интерактор или делегат, а не издевательства.

Мой код:

typealias SuccessBlock = (_ responseModel: [Weather]?) -> Void

protocol WeatherInfo {
   func fetchCityWeather ( success: @escaping SuccessBlock,
                      failure: @escaping (_ error: NSError?) -> Void)
}

protocol WeatherUpdates: WeatherInfo {
   func fetchCityWeather ( success: @escaping SuccessBlock,
                      failure: @escaping (_ error: NSError?) -> Void)
}

ViewMoodel:

class WeatherViewModel {

      private var interactor: WeatherInteractor
      private weak var delegate: BaseViewModelDelegate?

      init(interactor: WeatherInteractor, delegate: BaseViewModelDelegate) {
        self.interactor = interactor
        self.delegate = delegate
      }

      func getUpdates() {
        interactor.fetchCityWeather( success: { [weak self] weather in
           // do something
        }) { (error) in
          // show error
    }
  }
}

Тест:

class WeatherViewModelTests: XCTestCase {

var classUnderTest: WeatherViewModel!
let mockInteractor = MockWeatherInteractor()
let mockDelegate = MockBaseViewModelDelegate()

 override func setUp() {
    classUnderTest = WeatherViewModel(interactor: mockInteractor,
                                      delegate: mockDelegate)
 }

func testThatClosureReturnsCorrectValue() {
    var mockUpdates: [Weather]? = nil
    var testBool = false

    stub(mockInteractor) {
        when($0.fetchCityWeather( success: anyClosure(), failure: anyClosure())).then({ success, _ in
            testBool = true
            success(mockUpdates)
        })
    }

    classUnderTest.getUpdates()

    XCTAssertTrue(testBool)
  }

}
...