Created
December 12, 2022 00:04
-
-
Save thepearl/0acd55bc7dd30f2c764bcec10e363e98 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class MyViewModelTests: XCTestCase { | |
func testFetchData() { | |
let dataFetcher = MockDataFetcher() | |
let viewModel = MyViewModel(dataFetcher: dataFetcher) | |
let expectation = XCTestExpectation(description: "Fetch data") | |
dataFetcher.fetchDataResult = "test data" | |
viewModel.fetchData() | |
let cancellable = viewModel.dataPublisher | |
.sink(receiveCompletion: { completion in | |
switch completion { | |
case .finished: | |
break | |
case .failure(let error): | |
XCTFail("Publisher failed with error: \(error)") | |
} | |
}, receiveValue: { value in | |
XCTAssertEqual(value, "test data") | |
}) | |
expectation.fulfill() | |
wait(for: [expectation], timeout: 1.0) | |
} | |
} | |
class MockDataFetcher: DataFetcher { | |
var fetchDataResult: String? | |
func fetchData() -> AnyPublisher<String, Error> { | |
if let result = fetchDataResult { | |
return Just(result) | |
.setFailureType(to: Error.self) | |
.eraseToAnyPublisher() | |
} else { | |
return Fail(error: MockError.unknown) | |
.eraseToAnyPublisher() | |
} | |
} | |
} | |
enum MockError: Error { | |
case unknown | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment