Outlets
Utility functions for validating IBOutlet
and IBAction
connections.
About
Outlets provides a set of functions which validate that IBOutlets
are correctly connected between your Storyboard/XIB file and view controller properties. It can also validate that IBAction
methods are connected correctly as well.
This micro-library is based on the following post: Testing IBOutlets and IBActions With Curried Functions in Swift
Requirements
- Xcode 7.3+
- Swift 2.2+
- iOS 8.0+
Installation
CocoaPods (recommended)
target 'AppTests' do
use_frameworks!
pod 'Outlets'
end
Carthage
github "phatblat/Outlets"
Example
To run the example project, clone the repo, and run pod install
from the Example directory first.
Or run pod try Outlets
from the command line.
Getting Started
Here is an example of using Outlets with Quick and Nimble:
class ViewControllerSpec: QuickSpec {
override func spec() {
setupFailHandler { message in
if let message = message {
fail(message)
} else {
fail()
}
}
var viewController: UIViewController!
var hasBarButtonItemOutlet: BarButtonItemOutletAssertion!
var hasSegmentedControlOutlet: SegmentedControlOutletAssertion!
var receivesAction: ActionAssertion!
describe("view controller") {
beforeEach {
viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("ViewController")
viewController.loadView()
expect(viewController.view).toNot(beNil())
setupActionValidator { target, action, expectedAction in
expect(target) === viewController
expect(action).toNot(beNil())
if let action = action {
expect(action) == expectedAction
}
}
// Capture the new viewController instance for each test
hasBarButtonItemOutlet = outlet(viewController)
hasSegmentedControlOutlet = outlet(viewController)
receivesAction = action(viewController)
}
// MARK: - Outlets
it("has a leftButton outlet") {
hasBarButtonItemOutlet("leftButton")
}
it("has a rightButton outlet") {
hasBarButtonItemOutlet("rightButton")
}
it("has a segmentedControl outlet") {
hasSegmentedControlOutlet("segmentedControl")
}
// MARK: - Actions
it("receives a didTapLeftButton: action from leftButton") {
receivesAction("didTapLeftButton:", from: "leftButton")
}
it("receives a didTapRightButton: action from rightButton") {
receivesAction("didTapRightButton:", from: "rightButton")
}
it("receives a segmentedControlValueDidChange: action from segmentedControl") {
receivesAction("segmentedControlValueDidChange:", from: "segmentedControl")
}
}
}
}
Author
Ben Chatelain, @phatblat
License
Outlets is released under the MIT License. See the LICENSE file for details.