BananaPeel 0.3.2

BananaPeel 0.3.2

测试已测试
Lang语言 SwiftSwift
许可 MIT
Published最新版本2017年3月
SwiftSwift 版本3.0
SPM支持 SPM

Mattias Eriksson 维护。



  • Mattias Eriksson

上下文 XCode UI 测试框架

安装

pod 'BananaPeel'

用途

在我关于框架总体的想法的 博客 上了解更多。

扩展您应用中每个视图的 BananaPeel 类以创建独特的上下文,便于测试和维护。

extension LoginViewPeel: BananaPeel {

    override func viewDidAppear() -> Self {
        return self.assert {
            XCTAssertTrue(self.navigationBars["Login"].isVisible)
        }
    }

    func tapOnLoginButton() -> LoggedInViewPeel {
        return self.tap {
            $0.buttons["Login"]
        }
        .peel(on: LoggedInViewPeel.self)
    }

}

extension LoggedInViewPeel: BananaPeel {

    override func viewDidAppear() -> Self {
        return self.assert {
            XCTAssertTrue(self.navigationBars["Logged In"].isVisible)
        }
    }

    func tapOnLogoutButton() -> LoginViewPeel {
        return self.tap {
            $0.buttons["Logout"]
        }
        .peel(on: LoginViewPeel.self)
    }

}

现在您可以这样编写测试

func testLogin() {
    Banana()
        .addLaunchEnvironment(key: "isLoggedIn", value: "false")
        .peel(on: LoginViewPeel.self)
        .tapOnLoginButton()
        .peelOff()
}

func testLogout() {
    Banana()
        .addLaunchEnvironment(key: "isLoggedIn", value: "true")
        .peel(on: LoggedInViewPeel.self)
        .tapOnLogoutButton()
        .peelOff()
}

注意 您必须自己处理应用中的启动环境,以便将用户置于正确的状态。我计划扩展这个框架来提供辅助类来做这些。

API

Banana

init()

func addLaunchEnvironment(key: String, value: String) -> Self
func peel() -> BananaPeel
func peel<T: BananaPeel>(on peel: T.Type) -> BananaPeel

BananaPeel

open func viewDidAppear() -> Self
open func viewDidDisappear() -> Self

func assert(closure: (XCUIApplication) -> ()) -> Self
func enter(text: String, into element: (XCUIApplication) -> (XCUIElement)) -> Self
func swipeDown(element: (XCUIApplication) -> (XCUIElement)) -> Self
func swipeLeft(element: (XCUIApplication) -> (XCUIElement)) -> Self
func swipeRight(element: (XCUIApplication) -> (XCUIElement)) -> Self
func swipeUp(element: (XCUIApplication) -> (XCUIElement)) -> Self
func tap(element: (XCUIApplication) -> (XCUIElement)) -> Self
func wait(_ time: UInt32 = 1) -> Self
func waitUntilVisible(timeout: TimeInterval = 5, element: (XCUIApplication) -> (XCUIElement)) -> Self
func waitUntilNotVisible(timeout: TimeInterval = 5, element: (XCUIApplication) -> (XCUIElement)) -> Self
func peel<T: BananaPeel>(on peel: T.Type) -> T
func peelOff()