Je cherche à écrire des tests unitaires pour m'assurer que le clavier et les contrôleurs de vue présentés sont déclenchés correctement, mais je rencontre un comportement étrange que je ne comprends pas et que je pense être lié à la façon dont UIWindow
fonctionne. J'utilise Quick et Nimble, mais j'ai testé avec le XCTest
de base et j'ai les mêmes problèmes.
Mon code :
import Quick
import Nimble
class TestSpec: QuickSpec {
override func spec() {
let sut = UIViewController()
// La fenêtre est nulle lorsque ce test est exécuté en isolation
UIApplication.shared.keyWindow?.rootViewController = sut
// Cela ne fonctionne pas non plus
let window = UIWindow(frame: UIScreen.main.bounds)
window.rootViewController = sut
window.makeKeyAndVisible()
describe("ViewController") {
it("présente un UIAlertController") {
let alert = UIAlertController(title: "Test", message: "Ceci est un test", preferredStyle: .alert)
let okAction = UIAlertAction(title: "OK", style: .default, handler: nil)
alert.addAction(okAction)
sut.present(alert, animated: true, completion: nil)
expect(sut.presentedViewController).toEventually(beAnInstanceOf(UIAlertController.self))
}
}
}
}
Au début, je ne plaçais pas le contrôleur de vue dans une fenêtre, ce qui l'empêchait de présenter d'autres contrôleurs de vue. Maintenant, j'essaie de le placer dans une fenêtre, mais cela ne fonctionne pas non plus. Lorsque ce test est exécuté en isolation, la fenêtre est toujours nulle. Lorsque je le lance avec plusieurs autres tests, la fenêtre n'est parfois pas nulle, mais les tests échouent toujours. Il y a eu une brève période où les tests réussissaient, mais je ne parviens plus à reproduire cela pour une raison quelconque.
Des idées sur ce qui se passe ?