source: James Haville

  • When fetching something from the API, we need to be able to mock them so we are not reliant on them.
  • We want to isolate the view model.
  • We can isolate using protocol of the service.
  • Injecting mock service into the view model.
/// Test
class SomeTests: XCTestCase {
	var someVM: SomeVM!
	var mockSomeService: MockSomeService!
	
	override func setUp() {
		someVM = .init(someService: mockSomeService)
	}
 
	func testSomeService_shouldSuccess() {
		someVM.someFunc()
		XCTAssertTrue(someVM.isSuccess)
	}
}
// Mock Service
final class MockSomeService: SomeServiceProtocol {
	// Functions in that protocol
	func someApiCall() {
		completion(.success(()))
	}
}