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.