KIF 和 Quick/Nimble
KIF and Quick/Nimble
我正在尝试 KIF and Quick/Nimble iOS 一起玩得很好,所以我可以使用 QuickSpecs 进行我的 KIF 测试。
我的测试目前是这样的:
class HomeSceenSpec: QuickSpec {
override func spec() {
describe("Home screen") {
it("should have a failing test") {
let tester = self.tester()
tester.waitForViewWithAccessibilityLabel("Blah")
}
}
}
}
文本'Blah'不存在,测试应该失败。 failWithException:stopTest:
正在被调用,但它没有引发异常或导致 QuickSpec 测试失败。
如何整合这两种技术?
failWithException:stopTest:
调用 recordFailureWithDescription:inFile:atLine:expected:
似乎有问题。 (这种方法有很多混用)。
我找到的解决方案是在 QuickSpec 上创建一个 category/extension:
import Quick
import Nimble
import KIF
extension QuickSpec {
func tester(_ file : String = __FILE__, _ line : Int = __LINE__) -> KIFUITestActor {
return KIFUITestActor(inFile: file, atLine: line, delegate: self)
}
func system(_ file : String = __FILE__, _ line : Int = __LINE__) -> KIFSystemTestActor {
return KIFSystemTestActor(inFile: file, atLine: line, delegate: self)
}
override public func failWithException(exception: NSException!, stopTest stop: Bool) {
if let userInfo = exception.userInfo {
fail(exception.description,
file: userInfo["SenTestFilenameKey"] as String,
line: userInfo["SenTestLineNumberKey"] as UInt)
} else {
fail(exception.description)
}
}
}
我们刚刚发布了KIF-Quick
cocoapod,应该会有所帮助,请参阅:
http://cocoapods.org/pods/KIF-Quick
这里是规格示例:
import Quick
import KIF_Quick
class LoginSpec: KIFSpec {
override func spec() {
describe("successful login") {
context("home view") {
beforeEach() {
tester().navigateToLoginPage()
}
it("should open Welcome page") {
viewTester().usingLabel("Login User Name").enterText("user@example.com")
viewTester().usingLabel("Login Password").enterText("thisismypassword")
viewTester().usingLabel("Log In").tap()
viewTester().usingLabel("Welcome").waitForView()
}
afterEach() {
tester().returnToLoggedOutHomeScreen()
}
}
}
}
}
我正在尝试 KIF and Quick/Nimble iOS 一起玩得很好,所以我可以使用 QuickSpecs 进行我的 KIF 测试。
我的测试目前是这样的:
class HomeSceenSpec: QuickSpec {
override func spec() {
describe("Home screen") {
it("should have a failing test") {
let tester = self.tester()
tester.waitForViewWithAccessibilityLabel("Blah")
}
}
}
}
文本'Blah'不存在,测试应该失败。 failWithException:stopTest:
正在被调用,但它没有引发异常或导致 QuickSpec 测试失败。
如何整合这两种技术?
failWithException:stopTest:
调用 recordFailureWithDescription:inFile:atLine:expected:
似乎有问题。 (这种方法有很多混用)。
我找到的解决方案是在 QuickSpec 上创建一个 category/extension:
import Quick
import Nimble
import KIF
extension QuickSpec {
func tester(_ file : String = __FILE__, _ line : Int = __LINE__) -> KIFUITestActor {
return KIFUITestActor(inFile: file, atLine: line, delegate: self)
}
func system(_ file : String = __FILE__, _ line : Int = __LINE__) -> KIFSystemTestActor {
return KIFSystemTestActor(inFile: file, atLine: line, delegate: self)
}
override public func failWithException(exception: NSException!, stopTest stop: Bool) {
if let userInfo = exception.userInfo {
fail(exception.description,
file: userInfo["SenTestFilenameKey"] as String,
line: userInfo["SenTestLineNumberKey"] as UInt)
} else {
fail(exception.description)
}
}
}
我们刚刚发布了KIF-Quick
cocoapod,应该会有所帮助,请参阅:
http://cocoapods.org/pods/KIF-Quick
这里是规格示例:
import Quick
import KIF_Quick
class LoginSpec: KIFSpec {
override func spec() {
describe("successful login") {
context("home view") {
beforeEach() {
tester().navigateToLoginPage()
}
it("should open Welcome page") {
viewTester().usingLabel("Login User Name").enterText("user@example.com")
viewTester().usingLabel("Login Password").enterText("thisismypassword")
viewTester().usingLabel("Log In").tap()
viewTester().usingLabel("Welcome").waitForView()
}
afterEach() {
tester().returnToLoggedOutHomeScreen()
}
}
}
}
}