Olá, eu gostaria de testar um viewModel no meu viewController.
No meu controller, a variavel viewModel
é do tipo ViewModelProtocol
, para somente acessar as funções dentro desse protocol
, porém, quando eu tento usar o mock dessa viewModel, não funciona, pois, ou a minha viewModel não extende o protocol do mock ou minha class viewModel não entra em conformidade com o protocol mock.
Digamos que esse seja o meu arquivo da viewModel:
protocol ViewModelProtocol: class {
func somehing()
}
class ViewModel {
...
}
extends ViewModel: ViewModelProtocol {
func something() {
...
}
}
Digamos que esse seja o meu arquivo da viewController:
/*
@ ViewController
*/
let viewModel: ViewModelProtocol!
override func viewDidLoad() {
super.viewDidLoad()
viewModel = ViewModel()
}
Agora... no meu teste, eu estou tentando fazer assim:
class FavoritesViewControllerTests: XCTestCase {
var sut: ViewController!
var viewModel: MockViewModelProtocol!
override func setUp() {
super.setUp()
viewModel = MockViewModel() // ERRO -> Cannot assign value of type 'MockViewModel' to type 'MockViewModelProtocol?'
sut = ViewController.initiate(viewModel: viewModel) // Função que pega o controller da storyboard e retorna o controller
}
override func tearDown() {
super.tearDown()
}
func testTableViewNaoDeveEstarNilAposViewDidLoad() {
_ = sut.view // Força o evento viewDidLoad
XCTAssertNotNil(sut.favoritesTableView)
}
func testDeveRetornarUmFavotiroSalvos() {
let favAddress = FavoriteAddress(
alias: "Academia",
address: "Av. Padre Tomé, 200",
placeID: "ChIJo_ZyOxF5GZURx8wIeRij3aI",
number: "200",
latitude: "-30.03063229999999",
longitude: "-51.2359334",
id: "T5hB5gy7XQmanCHOjuVuvh7CoXX1MvWc599Q")
let academia = FavoritesCellViewModel(favorite: favAddress)
stub(viewModel) { mock in
when(mock.something).thenReturn([favAddress])
}
}
}
Se eu tentei substituir o tipo da viewModel
para ViewModelProtocol
, o stub
não funciona.
Alguém poderia me dar uma luz em como trabalhar com protocols ? Obrigado