SnappyTestCase
SnappyTestCase copied to clipboard
iOS Simulator type agnostic snapshot testing, built on top of the FBSnapshotTestCase.
SnappyTestCase
iOS Simulator type agnostic snapshot testing, built on top of the FBSnapshotTestCase.
Why?
Snapshot testing helps to deliver views that scale correctly with a wide range of screen sizes. When it comes to view controllers, we usually want to ensure they keep visual quality on a various set of existing devices, in each supported orientation. Test suite could be run on numerous variants of iOS Simulators. However, this could be a really time-consuming task, for sure not acceptable during a development process. SnappyTestCase tackles this issue by combining test with a set of device definitions (each one including screen size, scale, and orientation) to validate with, ignoring real device simulator context information.
Features
- Simulator type insensitive snapshot testing => restart free, quick various device testing
- Handy definitions of iOS devices to test with - both iPhone and iPad, with chainable filtering API
- Forcing simulator to adopt
scale
andorientation
according to test device definition - Adding device type and orientation to reference file names
- You can resize one and validate snapshot of another view (for example, you can resize whole window with
UITabBarController
and validate snapshot of its tab bar only) - Optional closure executed just before verifying view
Getting Started
Validating view controller on all existing iPhones, with portrait orientation (default):
func testAllDevices() {
let window = UIWindow()
window.makeKeyAndVisible()
window.rootViewController = ExampleViewController(nibName: nil, bundle: nil)
verifyViewSnaps(DeviceRack.iPhone.all, view: window)
}
For more examples of usage check out SnappyDemo
project.
Defining device set cheat sheet
Expression | Device set description | Snapshot count |
---|---|---|
DeviceRack.iPhone.all.landscape |
All iPhones, in landscape orientation | 4 |
DeviceRack.iPhone.all.portrait.uniqueWidths |
Set of iPhones covering all possible screen widths in portrait orientation | 3 |
DeviceRack.iPad.retina.landscape |
Retina 9.7" / 7.9" iPad, landscape | 1 |
Installation using CocoaPods
Add following line to your test target pods list in Podfile
:
pod 'SnappyTestCase'
License
SnappyTestCase
is distributed under the Apache 2.0 license.
Feedback
We love receiving feedback and we encourage you to contact us and share your thoughts either via e-mail [email protected] or Twitter by mentioning @tooploox.