キーボードとプレゼンテーションコントローラが正しくトリガされるようにユニットテストを作成しようとしていますが、どのようにUIWindow
作品に関連しています。私はQuickとNimbleを使用していますが、私はバニラXCTest
でテストして同じ問題を抱えています。ユニットテストでiOSのビューコントローラとキーボードが提示されました
マイコード:まず
import Quick
import Nimble
class TestSpec: QuickSpec {
override func spec() {
let sut = UIViewController()
// The window is nil when this test is run in isolation
UIApplication.shared.keyWindow?.rootViewController = sut
// This does not work either
let window = UIWindow(frame: UIScreen.main.bounds)
window.rootViewController = sut
window.makeKeyAndVisible()
describe("ViewController") {
it("presents a UIAlertController") {
let alert = UIAlertController(title: "Test", message: "This is a 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))
}
}
}
}
、私は他のView Controllerを提示するからそれを防ぐウィンドウにビューコントローラを入れていませんでした。今私は窓の中に入れようとしていますが、それはどちらも働いていません。このテストを単独で実行すると、ウィンドウは常にゼロになります。私は他のテストの束とそれを実行するとき、ウィンドウは時々nilではありませんが、テストはまだ失敗します。テストが終わった短い期間がありましたが、何らかの理由でそれをもう複製できません。
何がいいですか?
はあなたですテストを実行しているときにホストアプリケーションが実行されていますか? – DisableR