Popularity
2.8
Growing
Activity
4.2
-
129
5
7

Code Quality Rank: L5
Monthly Downloads: 4
Programming language: Swift
License: MIT License
Tags: Utility    
Latest version: v0.1.0

Outlets alternatives and similar libraries

Based on the "Utility" category

Do you think we are missing an alternative of Outlets or a related project?

Add another 'Utility' Library

README

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

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](LICENSE.md) file for details.


*Note that all licence references and agreements mentioned in the Outlets README section above are relevant to that project's source code only.