Utility functions for validating IBOutlet and IBAction connections
Swift Ruby Objective-C
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.bundle
Example
Outlets.xcodeproj
Outlets.xcworkspace
Outlets
OutletsTests
.gitignore
.travis.yml
CHANGELOG.md
Gemfile
Gemfile.lock
LICENSE.md
Outlets.podspec
README.md
Rakefile

README.md

Outlets logo

Outlets

Utility functions for validating IBOutlet and IBAction connections.

Version License Language Swift 2 Platform Carthage compatible Build Status codecov

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.