Swift
Need help with Outlets?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.
phatblat

Description

Utility functions for validating IBOutlet and IBAction connections

127 Stars 7 Forks MIT License 95 Commits 0 Opened issues

Services available

Need anything else?

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.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.