Skip to content

Send notifications directly from your UITesting classes to your running app.

License

Notifications You must be signed in to change notification settings

thompsonate/HSTestingBackchannel

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Backchannel for UITesting.

Snapshot is awesome.

Now it uses UI Testing.

UI Testing is massively better than UI Automation - but sometimes, you just want to cheat.

HSTestingBackchannel gives you a simple method to send messages from your UITesting tests directly to your running app in the form of notifications.

Installation

Install with CocoaPods

pod 'HSTestingBackchannel', :configuration => 'Debug'

# Dependency of HSTestingBackchannel - include this line to install it only in debug
pod 'GCDWebServer', :configuration => 'Debug'

Usage

1. In your App Delegate, install the helper

#if DEBUG
    import HSTestingBackchannel
#endif

And then, in application(_:didFinishLaunchingWithOptions:):

#if DEBUG
    HSTestingBackchannel.installReceiver()
#endif

2. Send notifications from your UITesting class

HSTestingBackchannel.sendNotification("SnapshotTest")

or

HSTestingBackchannel.sendNotification("SnapshotTest", with: ["aKey": "aValue"])

3. Respond to notifications within your app

#if DEBUG
    NotificationCenter.default.addObserver(
        forName: NSNotification.Name("SnapshotTest"),
        object: nil,
        queue: .main) { _ in
            // Do Something
    }) 
#endif

Bonus - Copy dummy files to the Simulator

Within a test method (or in setUp), call something like

HSTestingBackchannel.installFiles(from: "..pathTo/fastlane/DummyImages",
                                    to: HSTestingResources)

This will install the contents of DummyImages in the resources folder of your running app. You can also install directly to the Documents directory in the app.

Multiple Simultaneous Simulators

By default, Fastlane now runs multiple simulators simultaneously. This means you need to make sure that the server for each simulator is running on a different test.

Use the setup method to do the following

let app = XCUIApplication()

HSTestingBackchannel.port = UInt.random(in: 8000...60000)
app.launchArguments.append(
    contentsOf: ["-HSTestingBackchannelPort", "\(HSTestingBackchannel.port)"])

Snapshot.setupSnapshot(app, waitForAnimations: true)

app.launch()

How it works

HSTestingBackchannel installs a web server in your main app (GCDWebServer).

You simply send requests directly to that - and it recognises them and broadcasts NSNotifications

About

Send notifications directly from your UITesting classes to your running app.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Objective-C 91.2%
  • Ruby 8.8%