Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/tooploox/SnappyTestCase

iOS Simulator type agnostic snapshot testing, built on top of the FBSnapshotTestCase.
https://github.com/tooploox/SnappyTestCase

Last synced: 3 months ago
JSON representation

iOS Simulator type agnostic snapshot testing, built on top of the FBSnapshotTestCase.

Awesome Lists containing this project

README

        

![Tooploox](https://github.com/tooploox/SnappyTestCase/raw/master/tooploox-logo.png)

SnappyTestCase
======

iOS Simulator type agnostic snapshot testing, built on top of the [FBSnapshotTestCase](https://github.com/facebook/ios-snapshot-test-case).

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` and `orientation` 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):

```swift
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]](mailto:[email protected]) or Twitter by mentioning [@tooploox](https://twitter.com/tooploox).