Skip to content

esttorhe/Outlets

 
 

Repository files navigation

Outlets

Version License Platform Build Status codecov

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)

use_frameworks!
pod 'Outlets'
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.

About

Utility functions for validating IBOutlet and IBAction connections

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Swift 76.7%
  • Ruby 20.5%
  • Objective-C 2.8%