A lightweight, low-barrier-to-entry snapshot testing library for iOS
Why snapshot tests?
They’re easy to write, maintain, and debug
They focus on the visual output of your code (which is what the user sees)
They encourage you to write small, modular, and testable components
What this library is capable of
Recording and comparing snapshots of SwiftUI.View, UIView, and UIViewController
Storing the expected and actual snapshots in the test results
That’s it!
What it’s definitely not capable of
Recording snapshots using different accessibility traits or devices
What it’s probably not capable of
Any other use cases that weren’t mentioned above
Author’s note
If you are looking for a library that you will use on your production app, you should probably consider more powerful tools like pointfreeco/swift-snapshot-testing or uber/ios-snapshot-test-case. This library is more of a pet project than a finished product. I wanted to snapshot-test the small apps and components I build for fun without importing a full-blown 3rd party for my limited use case.
As a less interesting fact, this is also why I tried to imply the small size of the initiative in the project name, by using the -ino suffix, which appears to be a common diminutive suffix in Italian.
How to use
Add the library as a dependency using Swift Package Manager
Import snapshotino in your XCTestCase implementation
Use assertSnapshot to record and compare snapshots, examples below
For recording snapshots
Simply call assertSnapshot by setting record to true. The test will fail but the snapshot will be recorded under the __snapshots__ folder next to the test file.
Note that SwiftUI.View cannot be used directly because it’s not a concrete type. We use the asSnapshottableView property instead, which will return a wrapper type that can be passed to assertSnapshot.
snapshotino
A lightweight, low-barrier-to-entry snapshot testing library for iOS
Why snapshot tests?
What this library is capable of
SwiftUI.View
,UIView
, andUIViewController
That’s it!
What it’s definitely not capable of
What it’s probably not capable of
Author’s note
If you are looking for a library that you will use on your production app, you should probably consider more powerful tools like pointfreeco/swift-snapshot-testing or uber/ios-snapshot-test-case. This library is more of a pet project than a finished product. I wanted to snapshot-test the small apps and components I build for fun without importing a full-blown 3rd party for my limited use case.
As a less interesting fact, this is also why I tried to imply the small size of the initiative in the project name, by using the -ino suffix, which appears to be a common diminutive suffix in Italian.
How to use
snapshotino
in yourXCTestCase
implementationassertSnapshot
to record and compare snapshots, examples belowFor recording snapshots
Simply call
assertSnapshot
by settingrecord
totrue
. The test will fail but the snapshot will be recorded under the__snapshots__
folder next to the test file.For asserting snapshots
Call
assertSnapshot
without setting therecord
attribute (it’sfalse
by default).Note that
SwiftUI.View
cannot be used directly because it’s not a concrete type. We use theasSnapshottableView
property instead, which will return a wrapper type that can be passed toassertSnapshot
.Sample project
https://github.com/kublaios/KleinSnapshotTesting
License
This project is released under the MIT license. See LICENSE for details.