Closed SheveleR closed 7 years ago
You can stub calls to functions having closure parameters which in your case can be for example
let dummyPurposesArray = [PurposeObject] () let dummyPurpose = PurposeObject()
let dummyCompletionHandler = { (PurposeObject?) -> Void in }
let stubbedPurposeObject = PurposeObject()
mockViewController.when().call(withReturnValue: mockViewController.showCategory(purposes: dummyPurposesArray, currentPurpose: dummyPurpose, completion: dummyCompletionHandler), andArgumentMatching: [Anything(), Anything(), Anything()]).thenDo { (args: [Any?]) -> Void in (args[2] as! (PurposeObject?) -> (Void))(stubbedPurposeObject) }
So yes argumentcaptor is possible here like Mockit and you can pass in your desired purposeObject when stubbing.
Hope it helps.
Greetings! Have a some problems with testing func, which have call function with a closure parameter inside MVP architecture, testing non-mock Presenter with mocked ViewController Presenter - func chooseTypeOfPurpose() { view.showCategory(purposes: purposes, currentPurpose: currentPurpose) { (otherCategory) in if let category = otherCategory { self.setCategory(category) self.updateButtons() } } } MockViewController - func showCategory(purposes: [PurposeObject], currentPurpose: PurposeObject?, completion: @escaping (PurposeObject?) -> Void) { let viewController = PurposeViewController() viewController.purposeHandler = completion viewController.allPurposes = purposes viewController.currentPurpose = currentPurpose; self.navigationController?.pushViewController(viewController, animated: true) } So, what i can do in this situation? Can i handle completion with Mockit like in Mockito with argumentcaptor?